www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - structure alignment

reply Adam Sansier <Adam.Sansier gmail.com> writes:
I need to align every member of every struct in a module. I can't 
simply add align(n) inside every struct because that seems 
ridiculous. I could search and paste, but then D is missing a 
relatively important aspect of alignment.

I have about 100 struct's to align, member wise. From what I've 
read, align(n){ struct x; } only aligns the struct itself, is 
this true? Is there a way to set global alignment for members per 
module or per scope?
Jul 11 2016
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Tuesday, 12 July 2016 at 00:20:31 UTC, Adam Sansier wrote:
 I need to align every member of every struct in a module. I 
 can't simply add align(n) inside every struct because that 
 seems ridiculous.
Why are these structs needing the alignment?
 From what I've read, align(n){ struct x; } only aligns the 
 struct itself, is this true?
Right. To align the members, you put align(x) on the individual members (or align(x): at the top of the struct to apply to all of them)
 Is there a way to set global alignment for members per module 
 or per scope?
no
Jul 12 2016
parent reply Adam Sansier <Adam.Sansier gmail.com> writes:
On Tuesday, 12 July 2016 at 14:26:54 UTC, Adam D. Ruppe wrote:
 On Tuesday, 12 July 2016 at 00:20:31 UTC, Adam Sansier wrote:
 I need to align every member of every struct in a module. I 
 can't simply add align(n) inside every struct because that 
 seems ridiculous.
Why are these structs needing the alignment?
Because god said so.. I can't change it, not everything is in my control.
 From what I've read, align(n){ struct x; } only aligns the 
 struct itself, is this true?
Right. To align the members, you put align(x) on the individual members (or align(x): at the top of the struct to apply to all of them)
 Is there a way to set global alignment for members per module 
 or per scope?
no
Um, because that's the way they were defined! So your telling me that D is going to make me mark every member align(n) when C++ has a global pragma align that does it for all in the scope? I thought D was better than C++?
Jul 12 2016
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Tuesday, 12 July 2016 at 14:54:25 UTC, Adam Sansier wrote:
 Um, because that's the way they were defined! So your telling 
 me that D is going to make me mark every member align(n) when 
 C++ has a global pragma align that does it for all in the scope?
This is trivial, just add it to the bindings. :s/struct \(.*\) {/struct \1 {\ralign(1):
Jul 12 2016
parent Adam Sansier <Adam.Sansier gmail.com> writes:
On Tuesday, 12 July 2016 at 15:08:29 UTC, Adam D. Ruppe wrote:
 On Tuesday, 12 July 2016 at 14:54:25 UTC, Adam Sansier wrote:
 Um, because that's the way they were defined! So your telling 
 me that D is going to make me mark every member align(n) when 
 C++ has a global pragma align that does it for all in the 
 scope?
This is trivial, just add it to the bindings. :s/struct \(.*\) {/struct \1 {\ralign(1):
It's not trivial, a global modifier similar to pragma(align(n)) would be trivial. Your method makes many assumptions that may not hold. What if the struct is templated(possible), what if it has comments after struct and before {, etc? It's a hack that is not a solution. The proper solution is to have a way to properly specify that a struct has all members aligned without having to specify it on all members or per struct.
Jul 12 2016