Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: One (silly) question about "C"

Author: Uri Blass

Date: 09:55:35 02/05/02

Go up one level in this thread


On February 05, 2002 at 12:10:21, Tom Likens wrote:

>On February 05, 2002 at 08:32:35, Antonio Senatore wrote:
>
>>Hi friends:
>>
>>I have one array A[n] and another B[n] (both of the same dimension) and I want
>>to make A = B without using a loop like
>>
>>for (i=0; i < n; i++) A[i] = B[i];
>>
>>My question is if is it possible to do that without using none kind of loops
>>(and as I am working in C, I can't work with vectors or to use the lib
>>"algorithm")
>>
>>Thanks in advance
>>
>>Antonio
>
>Here ya go, here's a "simple" way to copy an array :)
>Note, from and to are what they imply and count holds the number of
>items to copy.
>
>    register int n=(count+7)/8;
>
>    switch(count & 7){
>        case 0: do { *to++ = *from++;
>        case 7:      *to++ = *from++;
>        case 6:      *to++ = *from++;
>        case 5:      *to++ = *from++;
>        case 4:      *to++ = *from++;
>        case 3:      *to++ = *from++;
>        case 2:      *to++ = *from++;
>        case 1:      *to++ = *from++;
>                } while(--n > 0);
>    }
>
>This was invented by Tom Duff a number of years back when he was at
>Lucas Films.  By the way, just to head off the question before it's
>asked, - Yep this is *legal* ANSI C.

Is there an advantage relative to the simple way of
for (i=0; i < n; i++) A[i] = B[i];
or using memcpy?

The only reason that I can imagine using that way is if it is faster but I guess
that an intelligent compiler already translates everything to the same assembler
program.

Uri



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.