packages feed

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; 
	}
}