From 85f69108713a10067d99a5feab15c12b7810d21e Mon Sep 17 00:00:00 2001 From: Dave Peticolas Date: Sat, 30 Sep 2000 06:23:09 +0000 Subject: [PATCH] Generalize gtable with user_data pointer. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@2989 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/register/cellblock.c | 12 ++++++------ src/register/gnome/gnucash-sheet.c | 12 ++++++------ src/register/gnome/gnucash-style.c | 13 +++++++------ src/register/gtable.c | 11 ++++++++--- src/register/gtable.h | 7 ++++--- src/register/table-allgui.c | 20 ++++++++++---------- 6 files changed, 41 insertions(+), 34 deletions(-) diff --git a/src/register/cellblock.c b/src/register/cellblock.c index 05dd02cd88..d0d313e39a 100644 --- a/src/register/cellblock.c +++ b/src/register/cellblock.c @@ -53,7 +53,7 @@ gnc_cellblock_new (int rows, int cols) /* =================================================== */ static gpointer -gnc_cellblock_cell_new (void) +gnc_cellblock_cell_new (gpointer user_data) { CellBlockCell *cb_cell; @@ -70,7 +70,7 @@ gnc_cellblock_cell_new (void) /* =================================================== */ static void -gnc_cellblock_cell_free (gpointer _cb_cell) +gnc_cellblock_cell_free (gpointer _cb_cell, gpointer user_data) { CellBlockCell *cb_cell = _cb_cell; @@ -88,7 +88,7 @@ gnc_cellblock_cell_free (gpointer _cb_cell) /* =================================================== */ static gpointer -gnc_cell_traverse_info_new (void) +gnc_cell_traverse_info_new (gpointer user_data) { CellTraverseInfo *ct_info; @@ -100,7 +100,7 @@ gnc_cell_traverse_info_new (void) /* =================================================== */ static void -gnc_cell_traverse_info_free (gpointer ct_info) +gnc_cell_traverse_info_free (gpointer ct_info, gpointer user_data) { g_free (ct_info); } @@ -126,12 +126,12 @@ gnc_cellblock_init (CellBlock *cellblock, int rows, int cols) /* malloc new cell table */ cellblock->cb_cells = g_table_new (gnc_cellblock_cell_new, - gnc_cellblock_cell_free); + gnc_cellblock_cell_free, NULL); g_table_resize (cellblock->cb_cells, rows, cols); /* malloc new traversal table */ cellblock->traverse_info = g_table_new (gnc_cell_traverse_info_new, - gnc_cell_traverse_info_free); + gnc_cell_traverse_info_free, NULL); g_table_resize (cellblock->traverse_info, rows, cols); for (row = 0; row < rows; row++) diff --git a/src/register/gnome/gnucash-sheet.c b/src/register/gnome/gnucash-sheet.c index 6351fe1ed8..cfa59eb674 100644 --- a/src/register/gnome/gnucash-sheet.c +++ b/src/register/gnome/gnucash-sheet.c @@ -2131,7 +2131,7 @@ gnucash_sheet_set_scroll_region (GnucashSheet *sheet) } static gpointer -sheet_block_cell_new (void) +sheet_block_cell_new (gpointer user_data) { SheetBlockCell *sb_cell; @@ -2141,13 +2141,13 @@ sheet_block_cell_new (void) } static void -sheet_block_cell_free (gpointer block) +sheet_block_cell_free (gpointer block, gpointer user_data) { g_free(block); } static void -gnucash_sheet_block_free (gpointer _block) +gnucash_sheet_block_free (gpointer _block, gpointer user_data) { SheetBlock *block = _block; @@ -2165,14 +2165,14 @@ gnucash_sheet_block_free (gpointer _block) } static gpointer -gnucash_sheet_block_new (void) +gnucash_sheet_block_new (gpointer user_data) { SheetBlock *block; block = g_new0 (SheetBlock, 1); block->block_cells = g_table_new (sheet_block_cell_new, - sheet_block_cell_free); + sheet_block_cell_free, NULL); return block; } @@ -2393,7 +2393,7 @@ gnucash_sheet_init (GnucashSheet *sheet) sheet->smooth_scroll = TRUE; sheet->blocks = g_table_new(gnucash_sheet_block_new, - gnucash_sheet_block_free); + gnucash_sheet_block_free, NULL); } diff --git a/src/register/gnome/gnucash-style.c b/src/register/gnome/gnucash-style.c index 6bc78b9c71..347910ed23 100644 --- a/src/register/gnome/gnucash-style.c +++ b/src/register/gnome/gnucash-style.c @@ -67,7 +67,7 @@ style_get_key (SheetBlockStyle *style) static gpointer -cell_dimensions_new (void) +cell_dimensions_new (gpointer user_data) { CellDimensions *cd; @@ -79,7 +79,7 @@ cell_dimensions_new (void) } static void -cell_dimensions_free (gpointer cd) +cell_dimensions_free (gpointer cd, gpointer user_data) { g_free(cd); } @@ -95,7 +95,7 @@ style_dimensions_new (SheetBlockStyle *style) dimensions->ncols = style->ncols; dimensions->cell_dimensions = g_table_new (cell_dimensions_new, - cell_dimensions_free); + cell_dimensions_free, NULL); g_table_resize (dimensions->cell_dimensions, style->nrows, style->ncols); @@ -618,7 +618,7 @@ gnucash_style_get_cell_style (SheetBlockStyle *style, int row, int col) } static gpointer -cell_style_new (void) +cell_style_new (gpointer user_data) { CellStyle *cs; @@ -628,7 +628,7 @@ cell_style_new (void) } static void -cell_style_free (gpointer _cs) +cell_style_free (gpointer _cs, gpointer user_data) { CellStyle *cs = _cs; @@ -659,7 +659,8 @@ gnucash_sheet_style_new (GnucashSheet *sheet, CellBlock *cursor, style->nrows = cursor->num_rows; style->ncols = cursor->num_cols; - style->cell_styles = g_table_new (cell_style_new, cell_style_free); + style->cell_styles = g_table_new (cell_style_new, + cell_style_free, NULL); g_table_resize (style->cell_styles, style->nrows, style->ncols); gnucash_sheet_style_recompile(style, sr, cursor_type); diff --git a/src/register/gtable.c b/src/register/gtable.c index 149b476696..8e93313797 100644 --- a/src/register/gtable.c +++ b/src/register/gtable.c @@ -32,11 +32,14 @@ struct GTable g_table_allocator allocator; g_table_deallocator deallocator; + + gpointer user_data; }; GTable * g_table_new (g_table_allocator allocator, - g_table_deallocator deallocator) + g_table_deallocator deallocator, + gpointer user_data) { GTable *gtable; @@ -53,6 +56,8 @@ g_table_new (g_table_allocator allocator, gtable->allocator = allocator; gtable->deallocator = deallocator; + gtable->user_data = user_data; + return gtable; } @@ -115,7 +120,7 @@ g_table_resize (GTable *gtable, int rows, int cols) tcp = >able->array->pdata[new_len]; for (i = new_len; i < old_len; i++, tcp++) - gtable->deallocator(*tcp); + gtable->deallocator(*tcp, gtable->user_data); } /* Change the size */ @@ -129,7 +134,7 @@ g_table_resize (GTable *gtable, int rows, int cols) tcp = >able->array->pdata[old_len]; for (i = old_len; i < new_len; i++, tcp++) - *tcp = gtable->allocator(); + *tcp = gtable->allocator(gtable->user_data); } gtable->rows = rows; diff --git a/src/register/gtable.h b/src/register/gtable.h index e5a85dbaca..0873139c14 100644 --- a/src/register/gtable.h +++ b/src/register/gtable.h @@ -31,15 +31,16 @@ typedef struct GTable GTable; -typedef gpointer (*g_table_allocator) (void); -typedef void (*g_table_deallocator) (gpointer); +typedef gpointer (*g_table_allocator) (gpointer user_data); +typedef void (*g_table_deallocator) (gpointer entry, gpointer user_data); /* Create a new table with the given allocator and deallocator. * Both functions must be given. They are used to populate the * table and free extra members when resizing and destroying. */ GTable * g_table_new (g_table_allocator allocator, - g_table_deallocator deallocator); + g_table_deallocator deallocator, + gpointer user_data); /* Free the table and all associated table elements. */ void g_table_destroy (GTable *gtable); diff --git a/src/register/table-allgui.c b/src/register/table-allgui.c index 794a660652..290c3bd44b 100644 --- a/src/register/table-allgui.c +++ b/src/register/table-allgui.c @@ -63,10 +63,10 @@ static GMemChunk *cell_mem_chunk = NULL; /** Prototypes *********************************************************/ static void gnc_table_init (Table * table); static void gnc_table_free_data (Table * table); -static gpointer gnc_virtual_cell_new (void); -static gpointer gnc_physical_cell_new (void); -static void gnc_virtual_cell_free (gpointer tcell); -static void gnc_physical_cell_free (gpointer tcell); +static gpointer gnc_virtual_cell_new (gpointer user_data); +static gpointer gnc_physical_cell_new (gpointer user_data); +static void gnc_virtual_cell_free (gpointer tcell, gpointer user_data); +static void gnc_physical_cell_free (gpointer tcell, gpointer user_data); static void gnc_table_resize (Table * table, int new_phys_rows, int new_phys_cols, int new_virt_rows, int new_virt_cols); @@ -88,10 +88,10 @@ gnc_table_new (void) gnc_table_init (table); table->virt_cells = g_table_new(gnc_virtual_cell_new, - gnc_virtual_cell_free); + gnc_virtual_cell_free, NULL); table->phys_cells = g_table_new(gnc_physical_cell_new, - gnc_physical_cell_free); + gnc_physical_cell_free, NULL); return table; } @@ -277,7 +277,7 @@ gnc_physical_location_init (PhysicalLocation *ploc) /* ==================================================== */ static gpointer -gnc_virtual_cell_new (void) +gnc_virtual_cell_new (gpointer user_data) { TableCell *tcell; VirtualCell *vcell; @@ -297,7 +297,7 @@ gnc_virtual_cell_new (void) /* ==================================================== */ static void -gnc_virtual_cell_free (gpointer tcell) +gnc_virtual_cell_free (gpointer tcell, gpointer user_data) { if (tcell == NULL) return; @@ -308,7 +308,7 @@ gnc_virtual_cell_free (gpointer tcell) /* ==================================================== */ static gpointer -gnc_physical_cell_new (void) +gnc_physical_cell_new (gpointer user_data) { TableCell *tcell; PhysicalCell *pcell; @@ -331,7 +331,7 @@ gnc_physical_cell_new (void) /* ==================================================== */ static void -gnc_physical_cell_free (gpointer _tcell) +gnc_physical_cell_free (gpointer _tcell, gpointer user_data) { TableCell *tcell = _tcell;