prepend-and-reverse instead of O(N^2) append

This commit is contained in:
Christopher Lam 2021-02-22 18:13:21 +08:00
parent b73cacd58c
commit b2b8792110
14 changed files with 36 additions and 33 deletions

View File

@ -192,11 +192,10 @@ gsidca_get_contained(GncDenseCalModel *model)
{ {
GncSxInstances *sx_instances = (GncSxInstances*)sxes->data; GncSxInstances *sx_instances = (GncSxInstances*)sxes->data;
if (xaccSchedXactionGetEnabled(sx_instances->sx)) if (xaccSchedXactionGetEnabled(sx_instances->sx))
{ list = g_list_prepend (list, GUINT_TO_POINTER
list = g_list_append(list, GUINT_TO_POINTER(GPOINTER_TO_UINT(sx_instances->sx))); (GPOINTER_TO_UINT (sx_instances->sx)));
}
} }
return list; return g_list_reverse (list);
} }
static gchar* static gchar*

View File

@ -1557,7 +1557,7 @@ get_selected_accounts_helper (GtkTreeModel *s_model,
/* Only selected if it passes the filter */ /* Only selected if it passes the filter */
if (gtvsi->priv->filter_fn == NULL || gtvsi->priv->filter_fn(account, gtvsi->priv->filter_data)) if (gtvsi->priv->filter_fn == NULL || gtvsi->priv->filter_fn(account, gtvsi->priv->filter_data))
{ {
gtvsi->return_list = g_list_append(gtvsi->return_list, account); gtvsi->return_list = g_list_prepend (gtvsi->return_list, account);
} }
} }
@ -1580,6 +1580,7 @@ gnc_tree_view_account_get_selected_accounts (GncTreeViewAccount *view)
info.priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view); info.priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view)); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
gtk_tree_selection_selected_foreach(selection, get_selected_accounts_helper, &info); gtk_tree_selection_selected_foreach(selection, get_selected_accounts_helper, &info);
info.return_list = g_list_reverse (info.return_list);
return info.return_list; return info.return_list;
} }

View File

@ -3014,13 +3014,15 @@ loan_create_sxes( LoanAssistantData *ldd )
g_string_free( gstr, TRUE ); g_string_free( gstr, TRUE );
gstr = NULL; gstr = NULL;
repaySXes = g_list_append( repaySXes, tcSX ); repaySXes = g_list_prepend (repaySXes, tcSX);
} }
/* repayment */ /* repayment */
ld_setup_repayment_sx( ldd, rod, paymentSX, tcSX ); ld_setup_repayment_sx( ldd, rod, paymentSX, tcSX );
} }
repaySXes = g_list_reverse (repaySXes);
/* Create the SXes */ /* Create the SXes */
{ {
GList *l; GList *l;

View File

@ -308,7 +308,7 @@ find_invalid_mappings (GtkTreeModel *model, GtkTreePath *path,
if (((g_strcmp0 (head, "online_id") == 0) && (depth == 1)) || (depth == 2)) if (((g_strcmp0 (head, "online_id") == 0) && (depth == 1)) || (depth == 2))
{ {
GtkTreeRowReference *rowref = gtk_tree_row_reference_new (model, path); GtkTreeRowReference *rowref = gtk_tree_row_reference_new (model, path);
*rowref_list = g_list_append (*rowref_list, rowref); *rowref_list = g_list_prepend (*rowref_list, rowref);
} }
} }
g_free (head); g_free (head);
@ -325,9 +325,6 @@ gnc_imap_remove_invalid_maps (ImapDialog *imap_dialog)
(GtkTreeModelForeachFunc)find_invalid_mappings, (GtkTreeModelForeachFunc)find_invalid_mappings,
&rr_list); &rr_list);
// reverse the reference list
rr_list = g_list_reverse (rr_list);
// Suspend GUI refreshing // Suspend GUI refreshing
gnc_suspend_gui_refresh(); gnc_suspend_gui_refresh();

View File

@ -228,12 +228,12 @@ lv_show_splits_free (GNCLotViewer *lv)
Split *split = node->data; Split *split = node->data;
if (NULL == xaccSplitGetLot(split)) if (NULL == xaccSplitGetLot(split))
{ {
filtered_list = g_list_append(filtered_list, split); filtered_list = g_list_prepend (filtered_list, split);
} }
} }
/* display list */ /* display list */
gnc_split_viewer_fill(lv, lv->split_free_store, filtered_list); gnc_split_viewer_fill(lv, lv->split_free_store, g_list_reverse (filtered_list));
} }
/* ======================================================================== */ /* ======================================================================== */

View File

@ -1629,7 +1629,7 @@ gnc_budget_view_refresh (GncBudgetView *budget_view)
if (col != NULL) if (col != NULL)
{ {
gtk_tree_view_append_column (priv->totals_tree_view, col); gtk_tree_view_append_column (priv->totals_tree_view, col);
totals_col_list = g_list_append (totals_col_list, col); totals_col_list = g_list_prepend (totals_col_list, col);
} }
num_periods_visible = g_list_length (col_list); num_periods_visible = g_list_length (col_list);
@ -1639,7 +1639,7 @@ gnc_budget_view_refresh (GncBudgetView *budget_view)
gdk_rgba_free (note_color_selected); gdk_rgba_free (note_color_selected);
priv->period_col_list = col_list; priv->period_col_list = col_list;
priv->totals_col_list = totals_col_list; priv->totals_col_list = g_list_reverse (totals_col_list);
if (priv->total_col == NULL) if (priv->total_col == NULL)
{ {

View File

@ -3722,7 +3722,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction* action,
{ {
if (xaccSplitGetAccount (split) == account) if (xaccSplitGetAccount (split) == account)
{ {
splits = g_list_append (splits, split); splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits); gnc_ui_print_check_dialog_create (window, splits);
g_list_free (splits); g_list_free (splits);
} }
@ -3733,7 +3733,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction* action,
split = gnc_split_register_get_current_trans_split (reg, NULL); split = gnc_split_register_get_current_trans_split (reg, NULL);
if (split) if (split)
{ {
splits = g_list_append (splits, split); splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits); gnc_ui_print_check_dialog_create (window, splits);
g_list_free (splits); g_list_free (splits);
} }
@ -5349,18 +5349,19 @@ gppr_account_destroy_cb (Account* account)
ledger_type = gnc_ledger_display_type (priv->ledger); ledger_type = gnc_ledger_display_type (priv->ledger);
if (ledger_type == LD_GL) if (ledger_type == LD_GL)
{ {
kill = g_list_append (kill, page); kill = g_list_prepend (kill, page);
/* kill it */ /* kill it */
} }
else if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT)) else if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
{ {
if (guid_compare (acct_guid, &priv->key) == 0) if (guid_compare (acct_guid, &priv->key) == 0)
{ {
kill = g_list_append (kill, page); kill = g_list_prepend (kill, page);
} }
} }
} }
kill = g_list_reverse (kill);
/* Now kill them. */ /* Now kill them. */
for (item = kill; item; item = g_list_next (item)) for (item = kill; item; item = g_list_next (item))
{ {

View File

@ -2614,7 +2614,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
{ {
if (xaccSplitGetAccount(split) == account) if (xaccSplitGetAccount(split) == account)
{ {
splits = g_list_append(splits, split); splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits); gnc_ui_print_check_dialog_create (window, splits);
g_list_free(splits); g_list_free(splits);
} }
@ -2625,7 +2625,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
split = gnc_tree_model_split_reg_trans_get_split_equal_to_ancestor(trans, account); split = gnc_tree_model_split_reg_trans_get_split_equal_to_ancestor(trans, account);
if (split) if (split)
{ {
splits = g_list_append(splits, split); splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits); gnc_ui_print_check_dialog_create (window, splits);
g_list_free(splits); g_list_free(splits);
} }
@ -4008,18 +4008,19 @@ gppr_account_destroy_cb (Account *account)
ledger_type = gnc_ledger_display2_type (priv->ledger); ledger_type = gnc_ledger_display2_type (priv->ledger);
if (ledger_type == LD2_GL) if (ledger_type == LD2_GL)
{ {
kill = g_list_append(kill, page); kill = g_list_prepend (kill, page);
/* kill it */ /* kill it */
} }
else if ((ledger_type == LD2_SINGLE) || (ledger_type == LD2_SUBACCOUNT)) else if ((ledger_type == LD2_SINGLE) || (ledger_type == LD2_SUBACCOUNT))
{ {
if (guid_compare(acct_guid, &priv->key) == 0) if (guid_compare(acct_guid, &priv->key) == 0)
{ {
kill = g_list_append(kill, page); kill = g_list_prepend (kill, page);
} }
} }
} }
kill = g_list_reverse (kill);
/* Now kill them. */ /* Now kill them. */
for (item = kill; item; item = g_list_next(item)) for (item = kill; item; item = g_list_next(item))
{ {

View File

@ -522,9 +522,10 @@ gnc_sx_get_instances(const GDate *range_end, gboolean include_disabled)
SchedXaction *sx = (SchedXaction*)sx_iter->data; SchedXaction *sx = (SchedXaction*)sx_iter->data;
if (xaccSchedXactionGetEnabled(sx)) if (xaccSchedXactionGetEnabled(sx))
{ {
enabled_sxes = g_list_append(enabled_sxes, sx); enabled_sxes = g_list_prepend (enabled_sxes, sx);
} }
} }
enabled_sxes = g_list_reverse (enabled_sxes);
instances->sx_instance_list = gnc_g_list_map(enabled_sxes, (GncGMapFunc)_gnc_sx_gen_instances, (gpointer)range_end); instances->sx_instance_list = gnc_g_list_map(enabled_sxes, (GncGMapFunc)_gnc_sx_gen_instances, (gpointer)range_end);
g_list_free(enabled_sxes); g_list_free(enabled_sxes);
} }

View File

@ -265,9 +265,9 @@ gnc_g_list_map(GList* list, GncGMapFunc fn, gpointer user_data)
GList *rtn = NULL; GList *rtn = NULL;
for (; list != NULL; list = list->next) for (; list != NULL; list = list->next)
{ {
rtn = g_list_append(rtn, (*fn)(list->data, user_data)); rtn = g_list_prepend (rtn, (*fn)(list->data, user_data));
} }
return rtn; return g_list_reverse (rtn);
} }
void void

View File

@ -380,12 +380,12 @@ gnc_sx_get_sxes_referencing_account(QofBook *book, Account *acct)
GncGUID *guid = NULL; GncGUID *guid = NULL;
qof_instance_get (QOF_INSTANCE (s), "sx-account", &guid, NULL); qof_instance_get (QOF_INSTANCE (s), "sx-account", &guid, NULL);
if (guid_equal(acct_guid, guid)) if (guid_equal(acct_guid, guid))
rtn = g_list_append(rtn, sx); rtn = g_list_prepend (rtn, sx);
guid_free (guid); guid_free (guid);
} }
} }
return rtn; return g_list_reverse (rtn);
} }
/* ========================== END OF FILE =============================== */ /* ========================== END OF FILE =============================== */

View File

@ -400,9 +400,10 @@ gncScrubLotDanglingPayments (GNCLot *lot)
if (gnc_numeric_compare (gnc_numeric_abs (free_val), gnc_numeric_abs (ll_val)) > 0) if (gnc_numeric_compare (gnc_numeric_abs (free_val), gnc_numeric_abs (ll_val)) > 0)
continue; continue;
filtered_list = g_list_append(filtered_list, free_split); filtered_list = g_list_prepend (filtered_list, free_split);
} }
filtered_list = g_list_reverse (filtered_list);
match_list = gncSLFindOffsSplits (filtered_list, ll_val); match_list = gncSLFindOffsSplits (filtered_list, ll_val);
g_list_free (filtered_list); g_list_free (filtered_list);

View File

@ -569,7 +569,7 @@ xaccTransSortSplits (Transaction *trans)
split = node->data; split = node->data;
if (gnc_numeric_negative_p (xaccSplitGetValue(split))) if (gnc_numeric_negative_p (xaccSplitGetValue(split)))
continue; continue;
new_list = g_list_append(new_list, split); new_list = g_list_prepend (new_list, split);
} }
/* then credits */ /* then credits */
@ -578,12 +578,12 @@ xaccTransSortSplits (Transaction *trans)
split = node->data; split = node->data;
if (!gnc_numeric_negative_p (xaccSplitGetValue(split))) if (!gnc_numeric_negative_p (xaccSplitGetValue(split)))
continue; continue;
new_list = g_list_append(new_list, split); new_list = g_list_prepend (new_list, split);
} }
/* install newly sorted list */ /* install newly sorted list */
g_list_free(trans->splits); g_list_free(trans->splits);
trans->splits = new_list; trans->splits = g_list_reverse (new_list);
} }

View File

@ -705,9 +705,9 @@ GList * gncCustomerGetJoblist (const GncCustomer *cust, gboolean show_all)
{ {
GncJob *j = iterator->data; GncJob *j = iterator->data;
if (gncJobGetActive (j)) if (gncJobGetActive (j))
list = g_list_append (list, j); list = g_list_prepend (list, j);
} }
return list; return g_list_reverse (list);
} }
} }