mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
[gnc-pricedb.cpp] use forloop instead of do..while and while
because they're scanning GLists, and forloop is tidier than while
This commit is contained in:
parent
ce6bdc2c2d
commit
6b741ddf32
@ -754,12 +754,9 @@ gnc_price_list_destroy(PriceList *prices)
|
||||
gboolean
|
||||
gnc_price_list_equal(PriceList *prices1, PriceList *prices2)
|
||||
{
|
||||
GList *n1 = prices1;
|
||||
GList *n2 = prices2;
|
||||
|
||||
if (prices1 == prices2) return TRUE;
|
||||
|
||||
while (n1 || n2)
|
||||
for (auto n1 = prices1, n2 = prices2; n1 || n2; n1 = g_list_next (n1), n2 = g_list_next (n2))
|
||||
{
|
||||
if (!n1)
|
||||
{
|
||||
@ -773,9 +770,6 @@ gnc_price_list_equal(PriceList *prices1, PriceList *prices2)
|
||||
}
|
||||
if (!gnc_price_equal (static_cast<GNCPrice*>(n1->data), static_cast<GNCPrice*>(n2->data)))
|
||||
return FALSE;
|
||||
|
||||
n1 = n1->next;
|
||||
n2 = n2->next;
|
||||
};
|
||||
|
||||
return TRUE;
|
||||
@ -1788,14 +1782,13 @@ static gboolean
|
||||
price_list_scan_any_currency(GList *price_list, gpointer data)
|
||||
{
|
||||
UsesCommodity *helper = (UsesCommodity*)data;
|
||||
GList *node = price_list;
|
||||
gnc_commodity *com;
|
||||
gnc_commodity *cur;
|
||||
|
||||
if (!price_list)
|
||||
return TRUE;
|
||||
|
||||
auto price = static_cast<GNCPrice*>(node->data);
|
||||
auto price = static_cast<GNCPrice*>(price_list->data);
|
||||
com = gnc_price_get_commodity(price);
|
||||
cur = gnc_price_get_currency(price);
|
||||
|
||||
@ -1807,7 +1800,7 @@ price_list_scan_any_currency(GList *price_list, gpointer data)
|
||||
/* The price list is sorted in decreasing order of time. Find the first
|
||||
price on it that is older than the requested time and add it and the
|
||||
previous price to the result list. */
|
||||
while (node != NULL)
|
||||
for (auto node = price_list; node; node = g_list_next (node))
|
||||
{
|
||||
price = static_cast<GNCPrice*>(node->data);
|
||||
time64 price_t = gnc_price_get_time64(price);
|
||||
@ -1832,7 +1825,6 @@ price_list_scan_any_currency(GList *price_list, gpointer data)
|
||||
gnc_price_ref(price);
|
||||
*helper->list = g_list_prepend(*helper->list, price);
|
||||
}
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
@ -2207,14 +2199,10 @@ gnc_pricedb_lookup_at_time64(GNCPriceDB *db,
|
||||
const gnc_commodity *currency,
|
||||
time64 t)
|
||||
{
|
||||
GList *price_list;
|
||||
GList *item = NULL;
|
||||
|
||||
if (!db || !c || !currency) return NULL;
|
||||
ENTER ("db=%p commodity=%p currency=%p", db, c, currency);
|
||||
price_list = pricedb_get_prices_internal (db, c, currency, TRUE);
|
||||
item = price_list;
|
||||
while (item)
|
||||
auto price_list = pricedb_get_prices_internal (db, c, currency, TRUE);
|
||||
for (auto item = price_list; item; item = item->next)
|
||||
{
|
||||
auto p = static_cast<GNCPrice*>(item->data);
|
||||
time64 price_time = gnc_price_get_time64(p);
|
||||
@ -2225,7 +2213,6 @@ gnc_pricedb_lookup_at_time64(GNCPriceDB *db,
|
||||
LEAVE("price is %p", p);
|
||||
return p;
|
||||
}
|
||||
item = item->next;
|
||||
}
|
||||
g_list_free (price_list);
|
||||
LEAVE (" ");
|
||||
@ -2243,21 +2230,19 @@ lookup_nearest_in_time(GNCPriceDB *db,
|
||||
GNCPrice *current_price = NULL;
|
||||
GNCPrice *next_price = NULL;
|
||||
GNCPrice *result = NULL;
|
||||
GList *item = NULL;
|
||||
|
||||
if (!db || !c || !currency) return NULL;
|
||||
if (t == INT64_MAX) return NULL;
|
||||
ENTER ("db=%p commodity=%p currency=%p", db, c, currency);
|
||||
price_list = pricedb_get_prices_internal (db, c, currency, TRUE);
|
||||
if (!price_list) return NULL;
|
||||
item = price_list;
|
||||
|
||||
/* default answer */
|
||||
current_price = static_cast<GNCPrice*>(item->data);
|
||||
current_price = static_cast<GNCPrice*>(price_list->data);
|
||||
|
||||
/* find the first candidate past the one we want. Remember that
|
||||
prices are in most-recent-first order. */
|
||||
while (!next_price && item)
|
||||
for (auto item = price_list; item; item = g_list_next (item))
|
||||
{
|
||||
auto p = static_cast<GNCPrice*>(item->data);
|
||||
time64 price_time = gnc_price_get_time64(p);
|
||||
@ -2267,7 +2252,6 @@ lookup_nearest_in_time(GNCPriceDB *db,
|
||||
break;
|
||||
}
|
||||
current_price = static_cast<GNCPrice*>(item->data);
|
||||
item = item->next;
|
||||
}
|
||||
|
||||
if (current_price) /* How can this be null??? */
|
||||
@ -2361,28 +2345,27 @@ gnc_pricedb_lookup_nearest_before_t64 (GNCPriceDB *db,
|
||||
const gnc_commodity *currency,
|
||||
time64 t)
|
||||
{
|
||||
GList *price_list;
|
||||
GNCPrice *current_price = NULL;
|
||||
/* GNCPrice *next_price = NULL;
|
||||
GNCPrice *result = NULL;*/
|
||||
GList *item = NULL;
|
||||
time64 price_time;
|
||||
|
||||
if (!db || !c || !currency) return NULL;
|
||||
ENTER ("db=%p commodity=%p currency=%p", db, c, currency);
|
||||
price_list = pricedb_get_prices_internal (db, c, currency, TRUE);
|
||||
|
||||
auto price_list = pricedb_get_prices_internal (db, c, currency, TRUE);
|
||||
if (!price_list) return NULL;
|
||||
item = price_list;
|
||||
do
|
||||
|
||||
for (auto item = price_list; item; item = item->next)
|
||||
{
|
||||
price_time = gnc_price_get_time64 (static_cast<GNCPrice*>(item->data));
|
||||
if (price_time <= t)
|
||||
current_price = static_cast<GNCPrice*>(item->data);
|
||||
item = item->next;
|
||||
auto p = static_cast<GNCPrice*>(item->data);
|
||||
if (gnc_price_get_time64 (p) <= t)
|
||||
{
|
||||
current_price = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (price_time > t && item);
|
||||
|
||||
gnc_price_ref(current_price);
|
||||
g_list_free (price_list);
|
||||
|
||||
LEAVE (" ");
|
||||
return current_price;
|
||||
}
|
||||
@ -2663,15 +2646,13 @@ static void
|
||||
pricedb_foreach_pricelist(gpointer key, gpointer val, gpointer user_data)
|
||||
{
|
||||
GList *price_list = (GList *) val;
|
||||
GList *node = price_list;
|
||||
GNCPriceDBForeachData *foreach_data = (GNCPriceDBForeachData *) user_data;
|
||||
|
||||
/* stop traversal when func returns FALSE */
|
||||
while (foreach_data->ok && node)
|
||||
for (auto node = price_list; foreach_data->ok && node; node = node->next)
|
||||
{
|
||||
GNCPrice *p = (GNCPrice *) node->data;
|
||||
foreach_data->ok = foreach_data->func(p, foreach_data->user_data);
|
||||
node = node->next;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2998,14 +2979,12 @@ static void
|
||||
void_pricedb_foreach_pricelist(gpointer key, gpointer val, gpointer user_data)
|
||||
{
|
||||
GList *price_list = (GList *) val;
|
||||
GList *node = price_list;
|
||||
VoidGNCPriceDBForeachData *foreach_data = (VoidGNCPriceDBForeachData *) user_data;
|
||||
|
||||
while (node)
|
||||
for (auto node = price_list; node; node = node->next)
|
||||
{
|
||||
GNCPrice *p = (GNCPrice *) node->data;
|
||||
foreach_data->func(p, foreach_data->user_data);
|
||||
node = node->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user