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