r16691 - gnucash/branches/gda-dev/src/backend/gda - Simplify handling of gnc_numeric columns

Phil Longstaff plongstaff at cvs.gnucash.org
Fri Dec 21 19:36:29 EST 2007


Author: plongstaff
Date: 2007-12-21 19:36:29 -0500 (Fri, 21 Dec 2007)
New Revision: 16691
Trac: http://svn.gnucash.org/trac/changeset/16691

Modified:
   gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-slots-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c
Log:
Simplify handling of gnc_numeric columns


Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c	2007-12-21 18:53:38 UTC (rev 16690)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c	2007-12-22 00:36:29 UTC (rev 16691)
@@ -62,7 +62,7 @@
     { "name",           CT_STRING, ACCOUNT_MAX_NAME_LEN,        COL_NNUL, "name" },
     { "account_type",   CT_STRING, ACCOUNT_MAX_TYPE_LEN,        COL_NNUL, NULL, ACCOUNT_TYPE_ },
     { "commodity_guid", CT_GUID_C, 0,                           COL_NNUL, "commodity" },
-    { "parent_guid",    CT_GUID,   0,                           0,        NULL, NULL, get_parent,    set_parent },
+    { "parent_guid",    CT_GUID,   0,                           0,        NULL, NULL, get_parent, set_parent },
     { "code",           CT_STRING, ACCOUNT_MAX_CODE_LEN,        0,        "code" },
     { "description",    CT_STRING, ACCOUNT_MAX_DESCRIPTION_LEN, 0,        "description" },
     { NULL }

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c	2007-12-21 18:53:38 UTC (rev 16690)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c	2007-12-22 00:36:29 UTC (rev 16691)
@@ -1053,6 +1053,9 @@
 	return 0;
 }
 
+typedef void (*NumericSetterFunc)( gpointer, gnc_numeric );
+typedef gnc_numeric (*NumericGetterFunc)( gpointer );
+
 static void
 load_numeric( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
@@ -1063,6 +1066,7 @@
     gint64 num, denom;
     gnc_numeric n;
     gboolean isNull = FALSE;
+	NumericSetterFunc n_setter = (NumericSetterFunc)setter;
 
     buf = g_strdup_printf( "%s_num", table->col_name );
     val = gda_data_model_get_value_at_col_name( pModel, buf, row );
@@ -1083,10 +1087,8 @@
         denom = get_integer_value( val );
     }
     n = gnc_numeric_create( num, denom );
-    if( isNull ) {
-        (*setter)( pObject, NULL );
-    } else {
-        (*setter)( pObject, &n );
+    if( !isNull ) {
+        (*n_setter)( pObject, n );
     }
 }
 
@@ -1094,17 +1096,15 @@
 get_gvalue_numeric( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
                 const col_cvt_t* table_row, GValue* value )
 {
-    QofAccessFunc getter;
-    gnc_numeric* n;
+    NumericGetterFunc getter;
+    gnc_numeric n;
 
     memset( value, 0, sizeof( GValue ) );
 
-    getter = get_getter( obj_name, table_row );
-    n = (gnc_numeric*)(*getter)( pObject, NULL );
-    if( n != NULL ) {
-        g_value_init( value, gnc_numeric_get_type() );
-        g_value_set_boxed( value, n );
-    }
+    getter = (NumericGetterFunc)get_getter( obj_name, table_row );
+    n = (*getter)( pObject );
+    g_value_init( value, gnc_numeric_get_type() );
+    g_value_set_boxed( value, &n );
 }
 
 static void

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c	2007-12-21 18:53:38 UTC (rev 16690)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c	2007-12-22 00:36:29 UTC (rev 16691)
@@ -43,8 +43,6 @@
 
 #define TABLE_NAME "prices"
 
-static gpointer get_value( gpointer pObject, const QofParam* param );
-static void set_value( gpointer pObject, gpointer pValue );
 static gpointer get_date( gpointer pObject, const QofParam* param );
 static void set_date( gpointer pObject, gpointer pValue );
 
@@ -54,39 +52,17 @@
 static col_cvt_t col_table[] =
 {
     { "guid",           CT_GUID,     0,                    COL_NNUL, "guid" },
-    { "commodity_guid", CT_GUID_C,   0,                    COL_NNUL, NULL, NULL,
-			(QofAccessFunc)gnc_price_get_commodity,
-			(QofSetterFunc)gnc_price_set_commodity },
-    { "currency_guid",  CT_GUID_C,   0,                    COL_NNUL, NULL, NULL,
-			(QofAccessFunc)gnc_price_get_currency,
-			(QofSetterFunc)gnc_price_set_currency },
+    { "commodity_guid", CT_GUID_C,   0,                    COL_NNUL, NULL, PRICE_COMMODITY },
+    { "currency_guid",  CT_GUID_C,   0,                    COL_NNUL, NULL, PRICE_CURRENCY },
     { "date",           CT_TIMESPEC, 0,                    COL_NNUL, NULL, NULL,       get_date,           set_date },
     { "source",         CT_STRING,   PRICE_MAX_SOURCE_LEN, 0,        NULL, PRICE_SOURCE },
     { "type",           CT_STRING,   PRICE_MAX_TYPE_LEN,   0,        NULL, PRICE_TYPE },
-    { "value",          CT_NUMERIC,  0,                    COL_NNUL, NULL, NULL,       get_value,          set_value },
+    { "value",          CT_NUMERIC,  0,                    COL_NNUL, NULL, PRICE_VALUE },
     { NULL }
 };
 
 /* ================================================================= */
-static gpointer
-get_value( gpointer pObject, const QofParam* param )
-{
-    const GNCPrice* pPrice = GNC_PRICE(pObject);
-    static gnc_numeric v;
 
-    v = gnc_price_get_value( pPrice );
-    return &v;
-}
-
-static void
-set_value( gpointer pObject, gpointer pValue )
-{
-    GNCPrice* pPrice = GNC_PRICE(pObject);
-    const gnc_numeric* pNumeric = (const gnc_numeric*)pValue;
-
-    gnc_price_set_value( pPrice, *pNumeric );
-}
-
 static gpointer
 get_date( gpointer pObject, const QofParam* param )
 {

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-slots-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-slots-gda.c	2007-12-21 18:53:38 UTC (rev 16690)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-slots-gda.c	2007-12-22 00:36:29 UTC (rev 16691)
@@ -69,8 +69,8 @@
 static void set_timespec_val( gpointer pObject, gpointer pValue );
 static gpointer get_guid_val( gpointer pObject, const QofParam* param );
 static void set_guid_val( gpointer pObject, gpointer pValue );
-static gpointer get_numeric_val( gpointer pObject, const QofParam* param );
-static void set_numeric_val( gpointer pObject, gpointer pValue );
+static gnc_numeric get_numeric_val( gpointer pObject, const QofParam* param );
+static void set_numeric_val( gpointer pObject, gnc_numeric value );
 
 #define SLOT_MAX_PATHNAME_LEN 500
 #define SLOT_MAX_STRINGVAL_LEN 1000
@@ -86,7 +86,8 @@
     { "double_val",   CT_DOUBLE,   0,                     0,                    NULL, NULL, get_double_val,   set_double_val },
     { "timespec_val", CT_TIMESPEC, 0,                     0,                    NULL, NULL, get_timespec_val, set_timespec_val },
     { "guid_val",     CT_GUID,     0,                     0,                    NULL, NULL, get_guid_val,     set_guid_val },
-    { "numeric_val",  CT_NUMERIC,  0,                     0,                    NULL, NULL, get_numeric_val,  set_numeric_val },
+    { "numeric_val",  CT_NUMERIC,  0,                     0,                    NULL, NULL,
+			(QofAccessFunc)get_numeric_val, (QofSetterFunc)set_numeric_val },
     { NULL }
 };
 
@@ -275,27 +276,25 @@
     }
 }
 
-static gpointer
+static gnc_numeric
 get_numeric_val( gpointer pObject, const QofParam* param )
 {
     slot_info_t* pInfo = (slot_info_t*)pObject;
-    static gnc_numeric n_val;
 
     if( kvp_value_get_type( pInfo->pKvpValue ) == KVP_TYPE_NUMERIC ) {
-        n_val = kvp_value_get_numeric( pInfo->pKvpValue );
-        return (gpointer)&n_val;
+        return kvp_value_get_numeric( pInfo->pKvpValue );
     } else {
-        return NULL;
+        return gnc_numeric_zero();
     }
 }
 
 static void
-set_numeric_val( gpointer pObject, gpointer pValue )
+set_numeric_val( gpointer pObject, gnc_numeric value )
 {
     slot_info_t* pInfo = (slot_info_t*)pObject;
 
     if( pInfo->value_type == KVP_TYPE_NUMERIC ) {
-        kvp_frame_set_numeric( pInfo->pKvpFrame, pInfo->path->str, *(gnc_numeric*)pValue );
+        kvp_frame_set_numeric( pInfo->pKvpFrame, pInfo->path->str, value );
     }
 }
 

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c	2007-12-21 18:53:38 UTC (rev 16690)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c	2007-12-22 00:36:29 UTC (rev 16691)
@@ -85,10 +85,6 @@
 static void set_split_reconcile_state( gpointer pObject, gpointer pValue );
 static gpointer get_split_reconcile_date( gpointer pObject, const QofParam* param );
 static void set_split_reconcile_date( gpointer pObject, gpointer pValue );
-static gpointer get_split_value( gpointer pObject, const QofParam* param );
-static void set_split_value( gpointer pObject, gpointer pValue );
-static gpointer get_split_quantity( gpointer pObject, const QofParam* param );
-static void set_split_quantity( gpointer pObject, gpointer pValue );
 
 #define SPLIT_MAX_MEMO_LEN 50
 #define SPLIT_MAX_ACTION_LEN 50
@@ -96,16 +92,14 @@
 static col_cvt_t split_col_table[] =
 {
     { "guid",            CT_GUID,     0,                    COL_NNUL, "guid" },
-    { "tx_guid",         CT_GUID_T,   0,                    COL_NNUL, NULL, NULL,
-			(QofAccessFunc)xaccSplitGetParent, (QofSetterFunc)xaccSplitSetParent },
-    { "account_guid",    CT_GUID_A,   0,                    COL_NNUL, NULL, NULL,
-			(QofAccessFunc)xaccSplitGetAccount, (QofSetterFunc)xaccSplitSetAccount },
+    { "tx_guid",         CT_GUID_T,   0,                    COL_NNUL, NULL, SPLIT_TRANS },
+    { "account_guid",    CT_GUID_A,   0,                    COL_NNUL, NULL, SPLIT_ACCOUNT },
     { "memo",            CT_STRING,   SPLIT_MAX_MEMO_LEN,   COL_NNUL, NULL, SPLIT_MEMO },
     { "action",          CT_STRING,   SPLIT_MAX_ACTION_LEN, COL_NNUL, NULL, SPLIT_ACTION },
     { "reconcile_state", CT_STRING,   1,                    COL_NNUL, NULL, NULL,    get_split_reconcile_state, set_split_reconcile_state },
     { "reconcile_date",  CT_TIMESPEC, 0,                    COL_NNUL, NULL, NULL,    get_split_reconcile_date,  set_split_reconcile_date },
-    { "value",           CT_NUMERIC,  0,                    COL_NNUL, NULL, NULL,    get_split_value,           set_split_value },
-    { "quantity",        CT_NUMERIC,  0,                    COL_NNUL, NULL, NULL,    get_split_quantity,        set_split_quantity },
+    { "value",           CT_NUMERIC,  0,                    COL_NNUL, NULL, SPLIT_VALUE },
+    { "quantity",        CT_NUMERIC,  0,                    COL_NNUL, NULL, SPLIT_AMOUNT },
     { NULL }
 };
 
@@ -115,7 +109,7 @@
     { NULL }
 };
 
-static void retrieve_numeric_value( gpointer pObject, gpointer pValue );
+static void retrieve_numeric_value( gpointer pObject, gnc_numeric value );
 
 /* ================================================================= */
 static gpointer
@@ -229,58 +223,18 @@
     xaccSplitSetDateReconciledTS( pSplit, pTS );
 }
 
-static gpointer
-get_split_value( gpointer pObject, const QofParam* param )
-{
-    const Split* pSplit = GNC_SPLIT(pObject);
-    static gnc_numeric v;
-
-    v = xaccSplitGetValue( pSplit );
-    return (gpointer)&v;
-}
-
 static void 
-set_split_value( gpointer pObject, gpointer pValue )
+retrieve_numeric_value( gpointer pObject, gnc_numeric value )
 {
-    Split* pSplit = GNC_SPLIT(pObject);
-    gnc_numeric* pV = (gnc_numeric*)pValue;
-
-    xaccSplitSetValue( pSplit, *pV );
-}
-
-static gpointer
-get_split_quantity( gpointer pObject, const QofParam* param )
-{
-    const Split* pSplit = GNC_SPLIT(pObject);
-    static gnc_numeric v;
-
-    v = xaccSplitGetAmount( pSplit );
-    return (gpointer)&v;
-}
-
-static void 
-set_split_quantity( gpointer pObject, gpointer pValue )
-{
-    Split* pSplit = GNC_SPLIT(pObject);
-    gnc_numeric* pV = (gnc_numeric*)pValue;
-
-    xaccSplitSetAmount( pSplit, *pV );
-}
-
-static void 
-retrieve_numeric_value( gpointer pObject, gpointer pValue )
-{
     gnc_numeric* pResult = (gnc_numeric*)pObject;
-    gnc_numeric val = *(gnc_numeric*)pValue;
-
-    *pResult = val;
+    *pResult = value;
 }
 
 
 // Table to retrieve just the quantity
 static col_cvt_t quantity_table[] =
 {
-    { "quantity", CT_NUMERIC, 0, COL_NNUL, NULL, NULL, NULL, retrieve_numeric_value },
+    { "quantity", CT_NUMERIC, 0, COL_NNUL, NULL, NULL, NULL, (QofSetterFunc)retrieve_numeric_value },
     { NULL }
 };
 



More information about the gnucash-changes mailing list