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