Mike Pinna has done some major reworking of the Loopy solver, giving
[sgt/puzzles] / puzzles.h
index f4fc67f..f67da1c 100644 (file)
--- a/puzzles.h
+++ b/puzzles.h
@@ -159,7 +159,7 @@ void get_random_seed(void **randseed, int *randseedsize);
 /*
  * drawing.c
  */
-drawing *drawing_init(const drawing_api *api, void *handle);
+drawing *drawing_new(const drawing_api *api, midend *me, void *handle);
 void drawing_free(drawing *dr);
 void draw_text(drawing *dr, int x, int y, int fonttype, int fontsize,
                int align, int colour, char *text);
@@ -278,8 +278,24 @@ void draw_rect_outline(drawing *dr, int x, int y, int w, int h,
 /*
  * dsf.c
  */
+int *snew_dsf(int size);
+
+void print_dsf(int *dsf, int size);
+
+/* Return the canonical element of the equivalence class containing element
+ * val.  If 'inverse' is non-NULL, this function will put into it a flag
+ * indicating whether the canonical element is inverse to val. */
+int edsf_canonify(int *dsf, int val, int *inverse);
 int dsf_canonify(int *dsf, int val);
+
+/* Allow the caller to specify that two elements should be in the same
+ * equivalence class.  If 'inverse' is TRUE, the elements are actually opposite
+ * to one another in some sense.  This function will fail an assertion if the
+ * caller gives it self-contradictory data, ie if two elements are claimed to
+ * be both opposite and non-opposite. */
+void edsf_merge(int *dsf, int v1, int v2, int inverse);
 void dsf_merge(int *dsf, int v1, int v2);
+void dsf_init(int *dsf, int len);
 
 /*
  * version.c
@@ -383,7 +399,7 @@ struct game {
     void (*compute_size)(game_params *params, int tilesize, int *x, int *y);
     void (*set_size)(drawing *dr, game_drawstate *ds,
                     game_params *params, int tilesize);
-    float *(*colours)(frontend *fe, game_state *state, int *ncolours);
+    float *(*colours)(frontend *fe, int *ncolours);
     game_drawstate *(*new_drawstate)(drawing *dr, game_state *state);
     void (*free_drawstate)(drawing *dr, game_drawstate *ds);
     void (*redraw)(drawing *dr, game_drawstate *ds, game_state *oldstate,
@@ -396,7 +412,7 @@ struct game {
     int can_print, can_print_in_colour;
     void (*print_size)(game_params *params, float *x, float *y);
     void (*print)(drawing *dr, game_state *state, int tilesize);
-    int (*wants_statusbar)(void);
+    int wants_statusbar;
     int is_timed;
     int (*timing_state)(game_state *state, game_ui *ui);
     int flags;