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 ++++++++++++++++---------- src/alg.h | 3 ++- src/commands.c | 7 +++++-- src/solve.c | 2 +- 4 files changed, 24 insertions(+), 14 deletions(-) (limited to 'src') 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 diff --git a/src/alg.h b/src/alg.h index d32c8bf..6bee26b 100644 --- a/src/alg.h +++ b/src/alg.h @@ -22,6 +22,7 @@ bool commute(Move m1, Move m2); void copy_alg(Alg *src, Alg *dst); void free_alg(Alg *alg); void free_alglist(AlgList *l); +void inplace(Alg * (*f)(Alg *), Alg *alg); Alg * inverse_alg(Alg *alg); Move inverse_move(Move m); char * move_string(Move m); @@ -33,7 +34,7 @@ Alg * on_inverse(Alg *alg); void print_alg(Alg *alg, bool l); void print_alglist(AlgList *al, bool l); void swapmove(Move *m1, Move *m2); -void unniss(Alg *alg); +Alg * unniss(Alg *alg); void init_moveset(Moveset *ms); void init_all_movesets(); diff --git a/src/commands.c b/src/commands.c index 13405b7..8666278 100644 --- a/src/commands.c +++ b/src/commands.c @@ -525,8 +525,11 @@ cleanup_exec(CommandArgs *args) static void unniss_exec(CommandArgs *args) { - unniss(args->scramble); - print_alg(args->scramble, false); + Alg *aux; + + aux = unniss(args->scramble); + print_alg(aux, false); + free(aux); } static void diff --git a/src/solve.c b/src/solve.c index 915c909..587bbc8 100644 --- a/src/solve.c +++ b/src/solve.c @@ -153,7 +153,7 @@ dfs_check_solved(DfsArg *arg) arg->sols->last->alg ); if (arg->step->final) - unniss(arg->sols->last->alg); + inplace(unniss, arg->sols->last->alg); if (arg->opts->verbose) print_alg(arg->sols->last->alg, false); -- cgit v1.3