Simen kjaeraas <simen.kja...@gmail.com> wrote:
Trass3r <u...@known.com> wrote:
Here's a basic D2 fixed-size vector implementation for you to study:
http://sfml.svn.sourceforge.net/viewvc/sfml/branches/sfml2/DSFML/import/dsfml/system/vector.d?view=markup
I can't help but wonder if those neat SSE functions are a waste.
Functions that use inline assembly cannot be inlined, and thus aren't
necessarily faster than using good old x87. Now, if only DMD had some
intrinsics for that...
Oh, and also (if you don't mind my nitpicking), have you profiled
invSqrt compared to 1/sqrt? Last time I did, I found that invSqrt
was about 50% slower than 1/sqrt.
The one thing I missed when looking at the code was swizzling, so
I implemented it. Feel free to include it if you want, I will
demand nothing for it:
@property Vector!(T,n.length) opDispatch(string n)() const
if (allCharsValid(n,"xyzw"[0..dim]))
{
static if (n.length == 2) return
Vector!(T,n.length)(cell[n[0]-'x'], cell[n[1]-'x']);
static if (n.length == 3) return
Vector!(T,n.length)(cell[n[0]-'x'], cell[n[1]-'x'], cell[n[2]-'x']);
static if (n.length == 4) return
Vector!(T,n.length)(cell[n[0]-'x'], cell[n[1]-'x'], cell[n[2]-'x'],
cell[n[3]-'x']);
}
bool allCharsValid( string s, string valid )
{
foreach ( e1; s )
{
bool b = false;
foreach (e2; valid)
b |= e1 == e2;
if (!b)
return false;
}
return true;
}
I also wanted to allow for swizzled setters, but apparently that's
currently not possible[1].
[1]: http://d.puremagic.com/issues/show_bug.cgi?id=620
--
Simen