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;
if (xaccSchedXactionGetEnabled(sx_instances->sx))
{
list = g_list_append(list, GUINT_TO_POINTER(GPOINTER_TO_UINT(sx_instances->sx)));
}
list = g_list_prepend (list, GUINT_TO_POINTER
(GPOINTER_TO_UINT (sx_instances->sx)));
}
return list;
return g_list_reverse (list);
}
static gchar*

View File

@ -1557,7 +1557,7 @@ get_selected_accounts_helper (GtkTreeModel *s_model,
/* Only selected if it passes the filter */
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);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
gtk_tree_selection_selected_foreach(selection, get_selected_accounts_helper, &info);
info.return_list = g_list_reverse (info.return_list);
return info.return_list;
}

View File

@ -3014,13 +3014,15 @@ loan_create_sxes( LoanAssistantData *ldd )
g_string_free( gstr, TRUE );
gstr = NULL;
repaySXes = g_list_append( repaySXes, tcSX );
repaySXes = g_list_prepend (repaySXes, tcSX);
}
/* repayment */
ld_setup_repayment_sx( ldd, rod, paymentSX, tcSX );
}
repaySXes = g_list_reverse (repaySXes);
/* Create the SXes */
{
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))
{
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);
@ -325,9 +325,6 @@ gnc_imap_remove_invalid_maps (ImapDialog *imap_dialog)
(GtkTreeModelForeachFunc)find_invalid_mappings,
&rr_list);
// reverse the reference list
rr_list = g_list_reverse (rr_list);
// Suspend GUI refreshing
gnc_suspend_gui_refresh();

View File

@ -228,12 +228,12 @@ lv_show_splits_free (GNCLotViewer *lv)
Split *split = node->data;
if (NULL == xaccSplitGetLot(split))
{
filtered_list = g_list_append(filtered_list, split);
filtered_list = g_list_prepend (filtered_list, split);
}
}
/* 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)
{
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);
@ -1639,7 +1639,7 @@ gnc_budget_view_refresh (GncBudgetView *budget_view)
gdk_rgba_free (note_color_selected);
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)
{

View File

@ -3722,7 +3722,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction* action,
{
if (xaccSplitGetAccount (split) == account)
{
splits = g_list_append (splits, split);
splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, 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);
if (split)
{
splits = g_list_append (splits, split);
splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits);
g_list_free (splits);
}
@ -5349,18 +5349,19 @@ gppr_account_destroy_cb (Account* account)
ledger_type = gnc_ledger_display_type (priv->ledger);
if (ledger_type == LD_GL)
{
kill = g_list_append (kill, page);
kill = g_list_prepend (kill, page);
/* kill it */
}
else if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
{
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. */
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)
{
splits = g_list_append(splits, split);
splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, 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);
if (split)
{
splits = g_list_append(splits, split);
splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits);
g_list_free(splits);
}
@ -4008,18 +4008,19 @@ gppr_account_destroy_cb (Account *account)
ledger_type = gnc_ledger_display2_type (priv->ledger);
if (ledger_type == LD2_GL)
{
kill = g_list_append(kill, page);
kill = g_list_prepend (kill, page);
/* kill it */
}
else if ((ledger_type == LD2_SINGLE) || (ledger_type == LD2_SUBACCOUNT))
{
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. */
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;
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);
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;
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

View File

@ -380,12 +380,12 @@ gnc_sx_get_sxes_referencing_account(QofBook *book, Account *acct)
GncGUID *guid = NULL;
qof_instance_get (QOF_INSTANCE (s), "sx-account", &guid, NULL);
if (guid_equal(acct_guid, guid))
rtn = g_list_append(rtn, sx);
rtn = g_list_prepend (rtn, sx);
guid_free (guid);
}
}
return rtn;
return g_list_reverse (rtn);
}
/* ========================== 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)
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);
g_list_free (filtered_list);

View File

@ -569,7 +569,7 @@ xaccTransSortSplits (Transaction *trans)
split = node->data;
if (gnc_numeric_negative_p (xaccSplitGetValue(split)))
continue;
new_list = g_list_append(new_list, split);
new_list = g_list_prepend (new_list, split);
}
/* then credits */
@ -578,12 +578,12 @@ xaccTransSortSplits (Transaction *trans)
split = node->data;
if (!gnc_numeric_negative_p (xaccSplitGetValue(split)))
continue;
new_list = g_list_append(new_list, split);
new_list = g_list_prepend (new_list, split);
}
/* install newly sorted list */
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;
if (gncJobGetActive (j))
list = g_list_append (list, j);
list = g_list_prepend (list, j);
}
return list;
return g_list_reverse (list);
}
}