2011-12-31 12 views
7

Sono in procinto di eseguire il porting, migliorare e D-atizing il nostro reign SDK da C# a D. Attualmente funziona con il modulo di matematica Vector2.D performance: union vs @property

Ci sarà qualche differenza di prestazioni tra le due strutture di seguito? I miei punti di riferimento mostrano prestazioni identiche, ma mi piacerebbe avere un po 'di intuizione esperto :)

struct Vector2(T) 
{ 
    T x, y; 
    @property T u() { return x; } 
    @property T v() { return y; } 
    @property void u(T value) { x = value; } 
    @property void v(T value) { y = value; } 
} 

struct Vector2(T) 
{ 
    union { T x, u; } 
    union { T y, v; } 
} 

Ovviamente mi piacerebbe utilizzare i sindacati per semplicità sintattica. Ma c'è qualche insidia imprevista con il loro utilizzo? Non ho familiarità con i loro dettagli di basso livello.

In una nota a margine, sto aggiungendo la sintassi della proprietà vettoriale simile a HLSL/GLSL, ad es. Vec1.yxz + = vec2.xyz; C'è ... no ... il modo migliore per farlo con i sindacati invece di @property è lì?

+0

Avrete bisogno di opDispatch per 'vec1.yxz + = vec2.xyz', e credo che qualcuno abbia già fatto questo. – kennytm

+2

@KennyTM - sei corretto - https://bitbucket.org/dav1d/gljm e https://bitbucket.org/dav1d/gl3n – DejanLekic

risposta

13

Utilizzare alias!

struct Vector2(T) 
{ 
    T x, y; 
    alias x u; 
    alias y v; 
} 
+0

Doh! ... avrei dovuto saperlo. Grazie! –