uint vs size_t and two bugfixes in fak and unicode
* Better Description of copy.cc
* mem2swap throws a perror on failure
committer: Markus Bröker <mbroeker@largo.homelinux.org>
/**
* Duff's Device
* fast copy algorithm
* performs 8 times faster on long strings.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *duffcopy (char *to, char *from, size_t len)
{
size_t n, pos = 0;
n = (len + 7) / 8;
switch (len % 8) {
case 0:
do {
to[pos] = from[pos];
pos++;
case 7:
to[pos] = from[pos];
pos++;
case 6:
to[pos] = from[pos];
pos++;
case 5:
to[pos] = from[pos];
pos++;
case 4:
to[pos] = from[pos];
pos++;
case 3:
to[pos] = from[pos];
pos++;
case 2:
to[pos] = from[pos];
pos++;
case 1:
to[pos] = from[pos];
pos++;
} while (--n > 0);
}
return to;
}
int main (int argc, char **argv)
{
char *to, *from;
size_t len;
if (argc != 2) {
printf ("Usage: %s <string>\n", argv[0]);
return EXIT_FAILURE;
}
from = argv[1];
len = strlen (from) + 1;
if ((to = malloc (len)) == NULL) {
perror ("MALLOC");
return EXIT_FAILURE;
}
printf ("DUFF: %s\n", duffcopy (to, from, len));
if (to != NULL) {
free (to);
}
return EXIT_SUCCESS;
}