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

Reply via email to