Best way in D2 to rotate a ubyte[4] array

U2 fan iam at u2fan.com
Wed Mar 9 17:25:29 PST 2011


== Quote from bearophile (bearophileHUGS at lycos.com)'s article
> Tom:
> > What is the most efficient way of implement a rotation of ubyte[4] array?
> >
> > By rotation I mean: rotateRight([1, 2, 3, 4]) -> [4, 1, 2, 3]
> Two versions, I have done no benchmarks so far:
> import std.c.stdio: printf;
> union Four {
>     ubyte[4] a;
>     uint u;
> }
> void showFour(Four f) {
>     printf("f.u: %u\n", f.u);
>     printf("f.a: [%d, %d, %d, %d]\n",
>            cast(int)f.a[0], cast(int)f.a[1],
>            cast(int)f.a[2], cast(int)f.a[3]);
> }
> void main() {
>     Four f;
>     f.a[] = [1, 2, 3, 4];
>     showFour(f);
>     f.u = (f.u << 8) | (f.u >> 24);
>     showFour(f);
>     printf("\n");
>     // alternative
>     f.a[] = [1, 2, 3, 4];
>     uint u2 = f.u;
>     showFour(f);
>     printf("u2: %u\n", u2);
>     asm {
>         rol  u2, 8;
>     }
>     f.u = u2;
>     showFour(f);
> }
> Bye,
> bearophile

I am offend!


More information about the Digitalmars-d-learn mailing list