From: Ben Pfaff Date: Wed, 25 Dec 2019 21:38:49 +0000 (+0000) Subject: table: Simplify interface for number of rows and columns. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4953e577f4b83b16f3329e7ff22d60950f3b0d5;p=pspp table: Simplify interface for number of rows and columns. Nothing ever changes the number of rows or columns in a table after initializing it anymore, so the more complicated interface is not needed. --- diff --git a/src/output/tab.c b/src/output/tab.c index df0a052234..14d5658629 100644 --- a/src/output/tab.c +++ b/src/output/tab.c @@ -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; } /* 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) diff --git a/src/output/tab.h b/src/output/tab.h index 5b9f5d1fc5..b83e178ed8 100644 --- a/src/output/tab.h +++ b/src/output/tab.h @@ -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 diff --git a/src/output/table-provider.h b/src/output/table-provider.h index 8b7fdf0a71..27bf5f47bc 100644 --- a/src/output/table-provider.h +++ b/src/output/table-provider.h @@ -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); /* For use primarily by output drivers. */ diff --git a/src/output/table.c b/src/output/table.c index 060da89a91..9f8d202c60 100644 --- a/src/output/table.c +++ b/src/output/table.c @@ -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; -} struct area_style * area_style_clone (struct pool *pool, const struct area_style *old)