table: Simplify interface for number of rows and columns.
authorBen Pfaff <blp@cs.stanford.edu>
Wed, 25 Dec 2019 21:38:49 +0000 (21:38 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 29 Dec 2019 05:28:10 +0000 (05:28 +0000)
Nothing ever changes the number of rows or columns in a table after
initializing it anymore, so the more complicated interface is not needed.

src/output/tab.c
src/output/tab.h
src/output/table-provider.h
src/output/table.c

index df0a052234be98b1c89daf2167426c37557a5f5d..14d56586291d11a264b24bac4f631839b27a73ff 100644 (file)
@@ -73,11 +73,8 @@ tab_create (int nc, int nr)
   struct tab_table *t;
 
   t = pool_create_container (struct tab_table, container);
-  table_init (&t->table, &tab_table_class);
-  table_set_nc (&t->table, nc);
-  table_set_nr (&t->table, nr);
+  table_init (&t->table, &tab_table_class, nc, nr);
 
-  t->cf = nc;
   t->cc = pool_calloc (t->container, nr * nc, sizeof *t->cc);
   t->ct = pool_calloc (t->container, nr * nc, sizeof *t->ct);
 
@@ -136,7 +133,7 @@ tab_vline (struct tab_table *t, int style, int x, int y1, int y2)
     {
       int y;
       for (y = y1; y <= y2; y++)
-        t->rv[x + (t->cf + 1) * y] = style;
+        t->rv[x + (tab_nc (t) + 1) * y] = style;
     }
 }
 
@@ -167,7 +164,7 @@ tab_hline (struct tab_table *t, int style, int x1, int x2, int y)
     {
       int x;
       for (x = x1; x <= x2; x++)
-        t->rh[x + t->cf * y] = style;
+        t->rh[x + tab_nc (t) * y] = style;
     }
 }
 
@@ -206,8 +203,8 @@ tab_box (struct tab_table *t, int f_h, int f_v, int i_h, int i_v,
       int x;
       for (x = x1; x <= x2; x++)
         {
-          t->rh[x + t->cf * y1] = f_h;
-          t->rh[x + t->cf * (y2 + 1)] = f_h;
+          t->rh[x + tab_nc (t) * y1] = f_h;
+          t->rh[x + tab_nc (t) * (y2 + 1)] = f_h;
         }
     }
   if (f_v != -1)
@@ -215,8 +212,8 @@ tab_box (struct tab_table *t, int f_h, int f_v, int i_h, int i_v,
       int y;
       for (y = y1; y <= y2; y++)
         {
-          t->rv[x1 + (t->cf + 1) * y] = f_v;
-          t->rv[(x2 + 1) + (t->cf + 1) * y] = f_v;
+          t->rv[x1 + (tab_nc (t) + 1) * y] = f_v;
+          t->rv[(x2 + 1) + (tab_nc (t) + 1) * y] = f_v;
         }
     }
 
@@ -229,7 +226,7 @@ tab_box (struct tab_table *t, int f_h, int f_v, int i_h, int i_v,
           int x;
 
           for (x = x1; x <= x2; x++)
-            t->rh[x + t->cf * y] = i_h;
+            t->rh[x + tab_nc (t) * y] = i_h;
         }
     }
   if (i_v != -1)
@@ -241,7 +238,7 @@ tab_box (struct tab_table *t, int f_h, int f_v, int i_h, int i_v,
           int y;
 
           for (y = y1; y <= y2; y++)
-            t->rv[x + (t->cf + 1) * y] = i_v;
+            t->rv[x + (tab_nc (t) + 1) * y] = i_v;
         }
     }
 }
@@ -266,8 +263,8 @@ do_tab_text (struct tab_table *table, int c, int r, unsigned opt, char *text)
         }
     }
 
-  table->cc[c + r * table->cf] = text;
-  table->ct[c + r * table->cf] = opt;
+  table->cc[c + r * tab_nc (table)] = text;
+  table->ct[c + r * tab_nc (table)] = opt;
 }
 
 /* Sets cell (C,R) in TABLE, with options OPT, to have text value
@@ -332,9 +329,9 @@ add_joined_cell (struct tab_table *table, int x1, int y1, int x2, int y2,
   j->style = NULL;
 
   {
-    void **cc = &table->cc[x1 + y1 * table->cf];
-    unsigned short *ct = &table->ct[x1 + y1 * table->cf];
-    const int ofs = table->cf - (x2 - x1);
+    void **cc = &table->cc[x1 + y1 * tab_nc (table)];
+    unsigned short *ct = &table->ct[x1 + y1 * tab_nc (table)];
+    const int ofs = tab_nc (table) - (x2 - x1);
 
     int y;
 
@@ -385,7 +382,7 @@ void
 tab_add_footnote (struct tab_table *table, int x, int y,
                   const struct footnote *f)
 {
-  int index = x + y * table->cf;
+  int index = x + y * tab_nc (table);
   unsigned short opt = table->ct[index];
   struct tab_joined_cell *j;
 
@@ -409,7 +406,7 @@ void
 tab_add_style (struct tab_table *table, int x, int y,
                const struct area_style *style)
 {
-  int index = x + y * table->cf;
+  int index = x + y * tab_nc (table);
   unsigned short opt = table->ct[index];
   struct tab_joined_cell *j;
 
@@ -429,7 +426,7 @@ tab_add_style (struct tab_table *table, int x, int y,
 bool
 tab_cell_is_empty (const struct tab_table *table, int c, int r)
 {
-  return table->cc[c + r * table->cf] == NULL;
+  return table->cc[c + r * tab_nc (table)] == NULL;
 }
 \f
 /* Editing. */
@@ -476,7 +473,7 @@ tab_get_cell (const struct table *table, int x, int y,
               struct table_cell *cell)
 {
   const struct tab_table *t = tab_cast (table);
-  int index = x + y * t->cf;
+  int index = x + y * tab_nc (t);
   unsigned short opt = t->ct[index];
   const void *cc = t->cc[index];
 
@@ -548,7 +545,8 @@ tab_get_rule (const struct table *table, enum table_axis axis, int x, int y,
 {
   const struct tab_table *t = tab_cast (table);
   uint8_t raw = (axis == TABLE_VERT
-                 ? t->rh[x + t->cf * y] : t->rv[x + (t->cf + 1) * y]);
+                 ? t->rh[x + tab_nc (t) * y]
+                 : t->rv[x + (tab_nc (t) + 1) * y]);
   struct cell_color *p = t->rule_colors[(raw & TAB_RULE_STYLE_MASK)
                                         >> TAB_RULE_STYLE_SHIFT];
   if (p)
index 5b9f5d1fc5d64da9f9cb4f9ce5fd80c24afe624b..b83e178ed8cd7b872f9b84cd195173adad914dd0 100644 (file)
@@ -57,9 +57,6 @@ struct tab_table
     struct table table;
     struct pool *container;
 
-    /* Table title and caption, or null. */
-    int cf;                    /* Column factor for indexing purposes. */
-
     /* Table contents.
 
        Each array element in cc[] is ordinarily a "char *" pointer to a
index 8b7fdf0a710435bfe81067228005fdbabf20b148..27bf5f47bca3c89cd4454fad1eb7ba0e38d5cac9 100644 (file)
@@ -137,12 +137,7 @@ struct table_class
                      struct cell_color *color);
   };
 
-void table_init (struct table *, const struct table_class *);
-
-/* Table class implementations can call these functions or just set the
-   table's n[] and h[][] members directly. */
-void table_set_nc (struct table *, int nc);
-void table_set_nr (struct table *, int nr);
+void table_init (struct table *, const struct table_class *, int nc, int nr);
 \f
 /* For use primarily by output drivers. */
 
index 060da89a91bd5840ee7f38ec421428ddb05cc06f..9f8d202c60ae99b7bcd7b8214fd8c24cc1382dd4 100644 (file)
@@ -101,38 +101,23 @@ table_set_hb (struct table *table, int hb)
 /* Initializes TABLE as a table of the specified CLASS, initially with a
    reference count of 1.
 
-   TABLE initially has 0 rows and columns and no headers.  The table
-   implementation should update the numbers of rows and columns.  The table
+   TABLE initially has NR rows and NC columns and no headers.  The table
    implementation (or its client) may update the header rows and columns.
 
    A table is an abstract class, that is, a plain struct table is not useful on
    its own.  Thus, this function is normally called from the initialization
    function of some subclass of table. */
 void
-table_init (struct table *table, const struct table_class *class)
+table_init (struct table *table, const struct table_class *class,
+            int nc, int nr)
 {
   table->klass = class;
-  table->n[TABLE_HORZ] = table->n[TABLE_VERT] = 0;
+  table->n[TABLE_HORZ] = nc;
+  table->n[TABLE_VERT] = nr;
   table->h[TABLE_HORZ][0] = table->h[TABLE_HORZ][1] = 0;
   table->h[TABLE_VERT][0] = table->h[TABLE_VERT][1] = 0;
   table->ref_cnt = 1;
 }
-
-/* Sets the number of columns in TABLE to NC. */
-void
-table_set_nc (struct table *table, int nc)
-{
-  assert (!table_is_shared (table));
-  table->n[TABLE_HORZ] = nc;
-}
-
-/* Sets the number of rows in TABLE to NR. */
-void
-table_set_nr (struct table *table, int nr)
-{
-  assert (!table_is_shared (table));
-  table->n[TABLE_VERT] = nr;
-}
 \f
 struct area_style *
 area_style_clone (struct pool *pool, const struct area_style *old)