diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2022-02-27 12:11:07 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2022-02-27 12:11:07 +0100 |
| commit | de0352a2926b0708400a9629c1da813455a6f442 (patch) | |
| tree | b0bab5511cea4d9c2910e144d1ebf53c984f786b /src/alg.c | |
| parent | 75bd848e9e0cd9a14ca82018edac0b414fa4db44 (diff) | |
| download | nissy-de0352a2926b0708400a9629c1da813455a6f442.tar.gz nissy-de0352a2926b0708400a9629c1da813455a6f442.zip | |
Changed unniss() to return an Alg*. Addedd inplace() to run a function on an alg in place.
Diffstat (limited to '')
| -rw-r--r-- | src/alg.c | 26 |
1 files changed, 16 insertions, 10 deletions
| @@ -219,6 +219,16 @@ free_alglistnode(AlgListNode *aln) | |||
| 219 | free(aln); | 219 | free(aln); |
| 220 | } | 220 | } |
| 221 | 221 | ||
| 222 | void | ||
| 223 | inplace(Alg * (*f)(Alg *), Alg *alg) | ||
| 224 | { | ||
| 225 | Alg *aux; | ||
| 226 | |||
| 227 | aux = f(alg); | ||
| 228 | copy_alg(aux, alg); | ||
| 229 | free(aux); | ||
| 230 | } | ||
| 231 | |||
| 222 | Alg * | 232 | Alg * |
| 223 | inverse_alg(Alg *alg) | 233 | inverse_alg(Alg *alg) |
| 224 | { | 234 | { |
| @@ -459,27 +469,23 @@ swapmove(Move *m1, Move *m2) | |||
| 459 | *m2 = aux; | 469 | *m2 = aux; |
| 460 | } | 470 | } |
| 461 | 471 | ||
| 462 | void | 472 | Alg * |
| 463 | unniss(Alg *alg) | 473 | unniss(Alg *alg) |
| 464 | { | 474 | { |
| 465 | int i; | 475 | int i; |
| 466 | Alg *aux; | 476 | Alg *ret; |
| 467 | 477 | ||
| 468 | aux = new_alg(""); | 478 | ret = new_alg(""); |
| 469 | 479 | ||
| 470 | for (i = 0; i < alg->len; i++) | 480 | for (i = 0; i < alg->len; i++) |
| 471 | if (!alg->inv[i]) | 481 | if (!alg->inv[i]) |
| 472 | append_move(aux, alg->move[i], false); | 482 | append_move(ret, alg->move[i], false); |
| 473 | 483 | ||
| 474 | for (i = alg->len-1; i >= 0; i--) | 484 | for (i = alg->len-1; i >= 0; i--) |
| 475 | if (alg->inv[i]) | 485 | if (alg->inv[i]) |
| 476 | append_move(aux, inverse_move(alg->move[i]), false); | 486 | append_move(ret, inverse_move(alg->move[i]), false); |
| 477 | 487 | ||
| 478 | for (i = 0; i < alg->len; i++) { | 488 | return ret; |
| 479 | alg->move[i] = aux->move[i]; | ||
| 480 | alg->inv[i] = false; | ||
| 481 | } | ||
| 482 | free(aux); | ||
| 483 | } | 489 | } |
| 484 | 490 | ||
| 485 | void | 491 | void |
