aboutsummaryrefslogtreecommitdiff
path: root/bridges.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2023-04-20 13:52:13 +0100
committerSimon Tatham <anakin@pobox.com>2023-04-20 17:21:54 +0100
commit11a8149d673d96bec17d6487b5fa95b5bf5ffd6b (patch)
tree8087f57805f3cc7f981bffcee9fecebd9e806610 /bridges.c
parentbb561ee3b18be69e52b17cedde50eac96ea409da (diff)
downloadpuzzles-11a8149d673d96bec17d6487b5fa95b5bf5ffd6b.zip
puzzles-11a8149d673d96bec17d6487b5fa95b5bf5ffd6b.tar.gz
puzzles-11a8149d673d96bec17d6487b5fa95b5bf5ffd6b.tar.bz2
puzzles-11a8149d673d96bec17d6487b5fa95b5bf5ffd6b.tar.xz
Use a dedicated copy function to copy dsfs.
Previously we were duplicating the contents of a dsf using straight-up memcpy. Now there's a dsf_copy function wrapping the same memcpy. For the moment, this still has to take a size parameter, because the size isn't stored inside the dsf itself. But once we make a proper data type, it will be.
Diffstat (limited to 'bridges.c')
-rw-r--r--bridges.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/bridges.c b/bridges.c
index bb66c20..e51bfe9 100644
--- a/bridges.c
+++ b/bridges.c
@@ -1551,7 +1551,7 @@ static bool solve_island_stage3(struct island *is, bool *didsth_r)
maxb = -1;
/* We have to squirrel the dsf away and restore it afterwards;
* it is additive only, and can't be removed from. */
- memcpy(ss->tmpdsf, ss->dsf, wh*sizeof(int));
+ dsf_copy(ss->tmpdsf, ss->dsf, wh);
for (n = curr+1; n <= curr+spc; n++) {
solve_join(is, i, n, false);
map_update_possibles(is->state);
@@ -1567,7 +1567,7 @@ static bool solve_island_stage3(struct island *is, bool *didsth_r)
}
}
solve_join(is, i, curr, false); /* put back to before. */
- memcpy(ss->dsf, ss->tmpdsf, wh*sizeof(int));
+ dsf_copy(ss->dsf, ss->tmpdsf, wh);
if (maxb != -1) {
/*debug_state(is->state);*/
@@ -1636,7 +1636,7 @@ static bool solve_island_stage3(struct island *is, bool *didsth_r)
is->adj.points[j].dx ? G_LINEH : G_LINEV);
if (before[i] != 0) continue; /* this idea is pointless otherwise */
- memcpy(ss->tmpdsf, ss->dsf, wh*sizeof(int));
+ dsf_copy(ss->tmpdsf, ss->dsf, wh);
for (j = 0; j < is->adj.npoints; j++) {
spc = island_adjspace(is, true, missing, j);
@@ -1651,7 +1651,7 @@ static bool solve_island_stage3(struct island *is, bool *didsth_r)
for (j = 0; j < is->adj.npoints; j++)
solve_join(is, j, before[j], false);
- memcpy(ss->dsf, ss->tmpdsf, wh*sizeof(int));
+ dsf_copy(ss->dsf, ss->tmpdsf, wh);
if (got) {
debug(("island at (%d,%d) must connect in direction (%d,%d) to"