gnucash unstable: Change gnc_pricedb_convert_balance_nearest_price from timespec to time64.
John Ralls
jralls at code.gnucash.org
Sat Jan 20 19:43:03 EST 2018
Updated via https://github.com/Gnucash/gnucash/commit/ca22d553 (commit)
from https://github.com/Gnucash/gnucash/commit/74ddb671 (commit)
commit ca22d5531b557b5835d028257300554ddc3e78a1
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Sat Jan 20 16:40:45 2018 -0800
Change gnc_pricedb_convert_balance_nearest_price from timespec to time64.
diff --git a/gnucash/gnome-utils/window-main-summarybar.c b/gnucash/gnome-utils/window-main-summarybar.c
index be98fac..700c94d 100644
--- a/gnucash/gnome-utils/window-main-summarybar.c
+++ b/gnucash/gnome-utils/window-main-summarybar.c
@@ -142,8 +142,6 @@ gnc_ui_accounts_recurse (Account *parent, GList **currency_list,
GNCCurrencyAcc *non_curr_accum = NULL;
GList *children, *node;
gboolean non_currency = FALSE;
- Timespec end_timespec;
- Timespec start_timespec;
if (parent == NULL) return;
@@ -190,12 +188,11 @@ gnc_ui_accounts_recurse (Account *parent, GList **currency_list,
case ACCT_TYPE_PAYABLE:
case ACCT_TYPE_RECEIVABLE:
end_amount = xaccAccountGetBalanceAsOfDate(account, options.end_date);
- timespecFromTime64(&end_timespec, options.end_date);
end_amount_default_currency =
gnc_pricedb_convert_balance_nearest_price (pricedb, end_amount,
account_currency,
to_curr,
- end_timespec);
+ options.end_date);
if (!non_currency || options.non_currency)
{
@@ -226,20 +223,18 @@ gnc_ui_accounts_recurse (Account *parent, GList **currency_list,
case ACCT_TYPE_INCOME:
case ACCT_TYPE_EXPENSE:
start_amount = xaccAccountGetBalanceAsOfDate(account, options.start_date);
- timespecFromTime64(&start_timespec, options.start_date);
start_amount_default_currency =
gnc_pricedb_convert_balance_nearest_price (pricedb,
start_amount,
account_currency,
to_curr,
- start_timespec);
+ options.start_date);
end_amount = xaccAccountGetBalanceAsOfDate(account, options.end_date);
- timespecFromTime64(&end_timespec, options.end_date);
end_amount_default_currency =
gnc_pricedb_convert_balance_nearest_price (pricedb, end_amount,
account_currency,
to_curr,
- end_timespec);
+ options.end_date);
if (!non_currency || options.non_currency)
{
diff --git a/libgnucash/engine/Account.cpp b/libgnucash/engine/Account.cpp
index 84cd1e0..312b04b 100644
--- a/libgnucash/engine/Account.cpp
+++ b/libgnucash/engine/Account.cpp
@@ -3433,11 +3433,8 @@ xaccAccountConvertBalanceToCurrencyAsOfDate(const Account *acc, /* for book */
book = gnc_account_get_book (acc);
pdb = gnc_pricedb_get_db (book);
- ts.tv_sec = date;
- ts.tv_nsec = 0;
-
balance = gnc_pricedb_convert_balance_nearest_price(
- pdb, balance, balance_currency, new_currency, ts);
+ pdb, balance, balance_currency, new_currency, date);
return balance;
}
diff --git a/libgnucash/engine/gnc-pricedb.c b/libgnucash/engine/gnc-pricedb.c
index ab16aa0..186f697 100644
--- a/libgnucash/engine/gnc-pricedb.c
+++ b/libgnucash/engine/gnc-pricedb.c
@@ -26,6 +26,7 @@
#include <glib.h>
#include <string.h>
+#include <stdint.h>
#include "gnc-date.h"
#include "gnc-pricedb-p.h"
#include <qofinstance-p.h>
@@ -2501,7 +2502,7 @@ gnc_pricedb_lookup_latest_before (GNCPriceDB *db,
static gnc_numeric
direct_balance_conversion (GNCPriceDB *db, gnc_numeric bal,
const gnc_commodity *from, const gnc_commodity *to,
- Timespec *t)
+ time64 t)
{
GNCPrice *price;
gnc_numeric retval = gnc_numeric_zero();
@@ -2509,8 +2510,8 @@ direct_balance_conversion (GNCPriceDB *db, gnc_numeric bal,
return retval;
if (gnc_numeric_zero_p(bal))
return retval;
- if (t != NULL)
- price = gnc_pricedb_lookup_nearest_in_time(db, from, to, *t);
+ if (t != INT64_MAX)
+ price = gnc_pricedb_lookup_nearest_in_time64(db, from, to, t);
else
price = gnc_pricedb_lookup_latest(db, from, to);
if (price == NULL)
@@ -2606,7 +2607,7 @@ convert_balance(gnc_numeric bal, const gnc_commodity *from,
static gnc_numeric
indirect_balance_conversion (GNCPriceDB *db, gnc_numeric bal,
const gnc_commodity *from, const gnc_commodity *to,
- Timespec *t )
+ time64 t )
{
GList *from_prices = NULL, *to_prices = NULL;
PriceTuple tuple;
@@ -2615,7 +2616,7 @@ indirect_balance_conversion (GNCPriceDB *db, gnc_numeric bal,
return zero;
if (gnc_numeric_zero_p(bal))
return zero;
- if (t == NULL)
+ if (t == INT64_MAX)
{
from_prices = gnc_pricedb_lookup_latest_any_currency(db, from);
/* "to" is often the book currency which may have lots of prices,
@@ -2625,11 +2626,11 @@ indirect_balance_conversion (GNCPriceDB *db, gnc_numeric bal,
}
else
{
- from_prices = gnc_pricedb_lookup_nearest_in_time_any_currency(db,
- from, *t);
+ from_prices = gnc_pricedb_lookup_nearest_in_time_any_currency_t64(db,
+ from, t);
if (from_prices)
- to_prices = gnc_pricedb_lookup_nearest_in_time_any_currency(db,
- to, *t);
+ to_prices = gnc_pricedb_lookup_nearest_in_time_any_currency_t64(db,
+ to, t);
}
if (from_prices == NULL || to_prices == NULL)
return zero;
@@ -2659,7 +2660,7 @@ gnc_pricedb_convert_balance_latest_price(GNCPriceDB *pdb,
/* Look for a direct price. */
new_value = direct_balance_conversion(pdb, balance, balance_currency,
- new_currency, NULL);
+ new_currency, INT64_MAX);
if (!gnc_numeric_zero_p(new_value))
return new_value;
@@ -2668,7 +2669,7 @@ gnc_pricedb_convert_balance_latest_price(GNCPriceDB *pdb,
* and convert in two stages
*/
return indirect_balance_conversion(pdb, balance, balance_currency,
- new_currency, NULL);
+ new_currency, INT64_MAX);
}
gnc_numeric
@@ -2676,7 +2677,7 @@ gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,
gnc_numeric balance,
const gnc_commodity *balance_currency,
const gnc_commodity *new_currency,
- Timespec t)
+ time64 t)
{
gnc_numeric new_value;
@@ -2686,7 +2687,7 @@ gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,
/* Look for a direct price. */
new_value = direct_balance_conversion(pdb, balance, balance_currency,
- new_currency, &t);
+ new_currency, t);
if (!gnc_numeric_zero_p(new_value))
return new_value;
@@ -2695,7 +2696,7 @@ gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,
* and convert in two stages
*/
return indirect_balance_conversion(pdb, balance, balance_currency,
- new_currency, &t);
+ new_currency, t);
}
diff --git a/libgnucash/engine/gnc-pricedb.h b/libgnucash/engine/gnc-pricedb.h
index a2dddaf..3f0b65e 100644
--- a/libgnucash/engine/gnc-pricedb.h
+++ b/libgnucash/engine/gnc-pricedb.h
@@ -604,7 +604,7 @@ gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,
gnc_numeric balance,
const gnc_commodity *balance_currency,
const gnc_commodity *new_currency,
- Timespec t);
+ time64 t);
typedef gboolean (*GncPriceForeachFunc)(GNCPrice *p, gpointer user_data);
diff --git a/libgnucash/engine/test/utest-gnc-pricedb.c b/libgnucash/engine/test/utest-gnc-pricedb.c
index 8d92c01..34824a3 100644
--- a/libgnucash/engine/test/utest-gnc-pricedb.c
+++ b/libgnucash/engine/test/utest-gnc-pricedb.c
@@ -1206,7 +1206,7 @@ gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,// C: 1 Local: 0:0:0
static void
test_gnc_pricedb_convert_balance_nearest_price (PriceDBFixture *fixture, gconstpointer pData)
{
- Timespec t = gnc_dmy2timespec(15, 8, 2011);
+ time64 t = gnc_dmy2time64(15, 8, 2011);
gnc_numeric from = gnc_numeric_create(10000, 100);
gnc_numeric result =
gnc_pricedb_convert_balance_nearest_price(fixture->pricedb, from,
Summary of changes:
gnucash/gnome-utils/window-main-summarybar.c | 11 +++--------
libgnucash/engine/Account.cpp | 5 +----
libgnucash/engine/gnc-pricedb.c | 29 ++++++++++++++--------------
libgnucash/engine/gnc-pricedb.h | 2 +-
libgnucash/engine/test/utest-gnc-pricedb.c | 2 +-
5 files changed, 21 insertions(+), 28 deletions(-)
More information about the gnucash-changes
mailing list