gnucash maint: [balsheet-pnl] faster definition of balance lists

Christopher Lam clam at code.gnucash.org
Sun Apr 10 21:43:08 EDT 2022


Updated	 via  https://github.com/Gnucash/gnucash/commit/1420368b (commit)
	from  https://github.com/Gnucash/gnucash/commit/736d2231 (commit)



commit 1420368b5b3a8ce4fb8ec804473be811741da100
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Mon Apr 11 09:36:52 2022 +0800

    [balsheet-pnl] faster definition of balance lists
    
    because the accounts and accounts-cols-data have direct 1-to-1
    mapping, it is not necessary to map accounts and retrieve from
    accounts-cols-data. mapping from accounts-cols-data produces
    identical results, avoiding O(N^2) access from accounts-cols-data.

diff --git a/gnucash/report/reports/standard/balsheet-pnl.scm b/gnucash/report/reports/standard/balsheet-pnl.scm
index 79b81542f..085b60a32 100644
--- a/gnucash/report/reports/standard/balsheet-pnl.scm
+++ b/gnucash/report/reports/standard/balsheet-pnl.scm
@@ -753,17 +753,17 @@ also show overall period profit & loss."))
          ;; account-balances is a list of monetary amounts
          (accounts-balances
           (map
-           (lambda (acc)
-             (cons acc (let ((cols-data (assoc-ref accounts-cols-data acc)))
-                         (map col-datum-get-split-balance cols-data))))
-           accounts))
+           (match-lambda
+             ((acc . cols-data)
+              (cons acc (map col-datum-get-split-balance cols-data))))
+           accounts-cols-data))
 
          (accounts-balances-with-closing
           (map
-           (lambda (acc)
-             (cons acc (let ((cols-data (assoc-ref accounts-cols-data acc)))
-                         (map col-datum-get-split-balance-with-closing cols-data))))
-           accounts))
+           (match-lambda
+             ((acc . cols-data)
+              (cons acc (map col-datum-get-split-balance-with-closing cols-data))))
+           accounts-cols-data))
 
          (exchange-fn (and common-currency
                            (gnc:case-exchange-time-fn
@@ -914,11 +914,10 @@ also show overall period profit & loss."))
              ;; split is the last one at date boundary
              (accounts-splits-dates
               (map
-               (lambda (acc)
-                 (cons acc (let ((cols-data (assoc-ref accounts-cols-data acc)))
-                             (list->vector
-                              (map col-datum-get-last-split cols-data)))))
-               accounts))
+               (match-lambda
+                 ((acc . cols-data)
+                  (cons acc (list->vector (map col-datum-get-last-split cols-data)))))
+               accounts-cols-data))
 
              (get-cell-anchor-fn
               (lambda (account col-idx)
@@ -944,10 +943,10 @@ also show overall period profit & loss."))
              ;; dates. split-value-balance determined by transaction currency.
              (accounts-value-balances
               (map
-               (lambda (acc)
-                 (cons acc (let ((cols-data (assoc-ref accounts-cols-data acc)))
-                             (map col-datum-get-split-value-balance cols-data))))
-               accounts))
+               (match-lambda
+                 ((acc . cols-data)
+                  (cons acc (map col-datum-get-split-value-balance cols-data))))
+               accounts-cols-data))
 
              ;; a vector of collectors whereby each collector is the sum
              ;; of asset and liability split-value-balances at report



Summary of changes:
 gnucash/report/reports/standard/balsheet-pnl.scm | 33 ++++++++++++------------
 1 file changed, 16 insertions(+), 17 deletions(-)



More information about the gnucash-changes mailing list