gnucash stable: [account.cpp] gnc_account_remove_split searches from the end

Christopher Lam clam at code.gnucash.org
Tue May 21 08:31:33 EDT 2024


Updated	 via  https://github.com/Gnucash/gnucash/commit/5aff4fb5 (commit)
	from  https://github.com/Gnucash/gnucash/commit/2d030c5a (commit)



commit 5aff4fb57d7c9723676f02d4ae9a0ac47bcdf442
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Tue May 21 20:29:17 2024 +0800

    [account.cpp] gnc_account_remove_split searches from the end
    
    because removing the latest split is far more common (e.g. from ui or
    during book shutdown) than removing an early split.

diff --git a/libgnucash/engine/Account.cpp b/libgnucash/engine/Account.cpp
index e82fb8d9c0..294dfef09a 100644
--- a/libgnucash/engine/Account.cpp
+++ b/libgnucash/engine/Account.cpp
@@ -2002,8 +2002,11 @@ gnc_account_remove_split (Account *acc, Split *s)
 
     if (!g_hash_table_remove (priv->splits_hash, s))
         return false;
-    auto it = std::remove (priv->splits.begin(), priv->splits.end(), s);
-    priv->splits.erase (it, priv->splits.end());
+
+    // search splits in reverse, because removing the latest split is
+    // more common (e.g. from UI or during book shutdown)
+    auto rit = std::remove(priv->splits.rbegin(), priv->splits.rend(), s);
+    priv->splits.erase(rit.base(), priv->splits.end());
     //FIXME: find better event type
     qof_event_gen(&acc->inst, QOF_EVENT_MODIFY, nullptr);
     // And send the account-based event, too



Summary of changes:
 libgnucash/engine/Account.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)



More information about the gnucash-changes mailing list