sym-0.9: cbits/group.c
/* (c) Anders Claesson 2013 */
/* The permutation w is defined by w[i] = u[v[i]]. */
void
compose(long *w, const long *u, long k, const long *v, long n)
{
register long i = 0;
if (k < n) {
for ( ; i < n; i++, w++, v++)
*w = (*v < k) ? u[*v] : *v;
} else {
for ( ; i < n; i++, w++, v++)
*w = u[*v];
for ( ; i < k; i++, w++)
*w = u[i];
}
}
/* The permutation w is defined by w[u[i]] = v[i]. */
void
act(long *w, const long *u, long k, const long *v, long n)
{
register long i = 0;
if (k < n) {
for ( ; i < k; i++, u++, v++)
w[*u] = *v;
for ( ; i < n; i++, v++)
w[i] = *v;
} else {
for ( ; i < n; i++, u++, v++)
w[*u] = *v;
for ( ; i < k; i++, u++)
w[*u] = i;
}
}