From 6b741ddf320cbab9bc2953523e6d12cb02f66a8f Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Wed, 2 Aug 2023 08:34:13 +0800 Subject: [PATCH] [gnc-pricedb.cpp] use forloop instead of do..while and while because they're scanning GLists, and forloop is tidier than while --- libgnucash/engine/gnc-pricedb.cpp | 63 +++++++++++-------------------- 1 file changed, 21 insertions(+), 42 deletions(-) diff --git a/libgnucash/engine/gnc-pricedb.cpp b/libgnucash/engine/gnc-pricedb.cpp index 02212ddfa78..f67437140ab 100644 --- a/libgnucash/engine/gnc-pricedb.cpp +++ b/libgnucash/engine/gnc-pricedb.cpp @@ -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(n1->data), static_cast(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(node->data); + auto price = static_cast(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(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(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(item->data); + current_price = static_cast(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(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(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(item->data)); - if (price_time <= t) - current_price = static_cast(item->data); - item = item->next; + auto p = static_cast(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; } }