chiark / gitweb /
Mike's changes to dsf.c alter the internal storage format of dsf
authorSimon Tatham <anakin@pobox.com>
Wed, 1 Nov 2006 11:31:20 +0000 (11:31 +0000)
committerSimon Tatham <anakin@pobox.com>
Wed, 1 Nov 2006 11:31:20 +0000 (11:31 +0000)
structures, meaning that ad-hoc initialisation now doesn't work.
Hence, this checkin converts all ad-hoc dsf initialisations into
calls to dsf_init() or snew_dsf(). At least, I _hope_ I've caught
all of them.

[originally from svn r6888]

bridges.c
map.c
net.c
slant.c

index be173ff2385b655432b2682e80e4ddd7af0b9b59..93faf327349b111770b51f6f1a0a92dfd6584ffb 100644 (file)
--- a/bridges.c
+++ b/bridges.c
@@ -1064,8 +1064,7 @@ static void map_group(game_state *state)
     struct island *is, *is_join;
 
     /* Initialise dsf. */
-    for (i = 0; i < wh; i++)
-        dsf[i] = i;
+    dsf_init(dsf, wh);
 
     /* For each island, find connected islands right or down
      * and merge the dsf for the island squares as well as the
@@ -1602,9 +1601,8 @@ static game_state *new_state(game_params *params)
     ret->solved = ret->completed = 0;
 
     ret->solver = snew(struct solver_state);
-    ret->solver->dsf = snewn(wh, int);
+    ret->solver->dsf = snew_dsf(wh);
     ret->solver->tmpdsf = snewn(wh, int);
-    for (i = 0; i < wh; i++) ret->solver->dsf[i] = i;
 
     ret->solver->refcount = 1;
 
diff --git a/map.c b/map.c
index 4ab6c4f9ced50dc878e099c86a0b83d3e8c52c30..d70d4282b6fcb374567af57a775633e19c8b3633 100644 (file)
--- a/map.c
+++ b/map.c
@@ -1695,8 +1695,7 @@ static char *parse_edge_list(game_params *params, char **desc, int *map)
     int i, k, pos, state;
     char *p = *desc;
 
-    for (i = 0; i < wh; i++)
-       map[wh+i] = i;
+    dsf_init(map+wh, wh);
 
     pos = -1;
     state = 0;
diff --git a/net.c b/net.c
index ad970b6a2d783edf53f631ea96f036250f451347..c479963e546b26115eff24a331077c514fecb948 100644 (file)
--- a/net.c
+++ b/net.c
@@ -521,9 +521,7 @@ static int net_solver(int w, int h, unsigned char *tiles,
      * classes) by finding the representative of each tile and
      * setting equivalence[one]=the_other.
      */
-    equivalence = snewn(w * h, int);
-    for (i = 0; i < w*h; i++)
-       equivalence[i] = i;            /* initially all distinct */
+    equivalence = snew_dsf(w * h);
 
     /*
      * On a non-wrapping grid, we instantly know that all the edges
diff --git a/slant.c b/slant.c
index 6c540bad4f04233081e922c814a76df6bf9e326b..c1ddc09bed9fb6b2a7e3922ba4cb60f0a4f14891 100644 (file)
--- a/slant.c
+++ b/slant.c
@@ -468,15 +468,13 @@ static int slant_solve(int w, int h, const signed char *clues,
      * Establish a disjoint set forest for tracking connectedness
      * between grid points.
      */
-    for (i = 0; i < W*H; i++)
-       sc->connected[i] = i;          /* initially all distinct */
+    dsf_init(sc->connected, W*H);
 
     /*
      * Establish a disjoint set forest for tracking which squares
      * are known to slant in the same direction.
      */
-    for (i = 0; i < w*h; i++)
-       sc->equiv[i] = i;              /* initially all distinct */
+    dsf_init(sc->equiv, w*h);
 
     /*
      * Clear the slashval array.
@@ -1006,9 +1004,7 @@ static void slant_generate(int w, int h, signed char *soln, random_state *rs)
      * Establish a disjoint set forest for tracking connectedness
      * between grid points.
      */
-    connected = snewn(W*H, int);
-    for (i = 0; i < W*H; i++)
-       connected[i] = i;                      /* initially all distinct */
+    connected = snew_dsf(W*H);
 
     /*
      * Prepare a list of the squares in the grid, and fill them in
@@ -1389,8 +1385,7 @@ static int check_completion(game_state *state)
      * edge is visited at most twice.
      */
     dsf = state->clues->tmpdsf;
-    for (i = 0; i < W*H; i++)
-        dsf[i] = i;                   /* initially all distinct */
+    dsf_init(dsf, W*H);
     for (y = 0; y < h; y++)
         for (x = 0; x < w; x++) {
             int i1, i2;