From de0352a2926b0708400a9629c1da813455a6f442 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sun, 27 Feb 2022 12:11:07 +0100 Subject: Changed unniss() to return an Alg*. Addedd inplace() to run a function on an alg in place. --- src/alg.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src/alg.c') diff --git a/src/alg.c b/src/alg.c index 4f5079a..52bebc0 100644 --- a/src/alg.c +++ b/src/alg.c @@ -219,6 +219,16 @@ free_alglistnode(AlgListNode *aln) free(aln); } +void +inplace(Alg * (*f)(Alg *), Alg *alg) +{ + Alg *aux; + + aux = f(alg); + copy_alg(aux, alg); + free(aux); +} + Alg * inverse_alg(Alg *alg) { @@ -459,27 +469,23 @@ swapmove(Move *m1, Move *m2) *m2 = aux; } -void +Alg * unniss(Alg *alg) { int i; - Alg *aux; + Alg *ret; - aux = new_alg(""); + ret = new_alg(""); for (i = 0; i < alg->len; i++) if (!alg->inv[i]) - append_move(aux, alg->move[i], false); + append_move(ret, alg->move[i], false); for (i = alg->len-1; i >= 0; i--) if (alg->inv[i]) - append_move(aux, inverse_move(alg->move[i]), false); + append_move(ret, inverse_move(alg->move[i]), false); - for (i = 0; i < alg->len; i++) { - alg->move[i] = aux->move[i]; - alg->inv[i] = false; - } - free(aux); + return ret; } void -- cgit v1.3