optimise cacheLedger by using the tree to help calculate account balances
from:
	total time  =        0.14 secs   (7 ticks @ 20 ms)
	total alloc = 275,520,536 bytes  (excludes profiling overheads)
     cacheLedger                                     1   0.0    0.1      42.9       48.6
      sumTransactions                                0   0.0    0.6      28.6       42.5
       isZeroAmount                              13529   0.0    2.0      14.3       39.2
        showAmount                               13529   0.0    7.2      14.3       37.2
         showAmount'                             13529  14.3   29.9      14.3       29.9
         con2tag_Side#                           27232   0.0    0.0       0.0        0.0
       normaliseMixedAmount                       6733   0.0    1.8      14.3        2.7
        con2tag_Side#                              120   0.0    0.0       0.0        0.0
        sumAmountsPreservingPrice                 6803   0.0    0.2      14.3        1.0
         amountop                                13351   0.0    0.4      14.3        0.8
          convertAmountTo                        13351  14.3    0.4      14.3        0.4
           conversionRate                        13351   0.0    0.0       0.0        0.0
      isAccountNamePrefixOf                      25122   0.0    2.0       0.0        2.0
to:
	total time  =        0.08 secs   (4 ticks @ 20 ms)
	total alloc = 168,637,964 bytes  (excludes profiling overheads)
     cacheLedger                                     1   0.0    0.1       0.0       27.1
      sumTransactions                                0   0.0    0.3       0.0       18.8
       isZeroAmount                               3931   0.0    0.9       0.0       17.3
        showAmount                                3931   0.0    3.4       0.0       16.3
         showAmount'                              3931   0.0   12.9       0.0       12.9
         con2tag_Side#                            7884   0.0    0.0       0.0        0.0
       normaliseMixedAmount                       1964   0.0    0.8       0.0        1.3
        con2tag_Side#                               12   0.0    0.0       0.0        0.0
        sumAmountsPreservingPrice                 1970   0.0    0.1       0.0        0.5
         amountop                                 3793   0.0    0.2       0.0        0.4
          convertAmountTo                         3793   0.0    0.2       0.0        0.2
           conversionRate                         3793   0.0    0.0       0.0        0.0
			
			
This commit is contained in:
		
							parent
							
								
									b1f2d95e13
								
							
						
					
					
						commit
						76df6ec88f
					
				| @ -35,15 +35,26 @@ cacheLedger apats l = Ledger{rawledgertext="",rawledger=l,accountnametree=ant,ac | ||||
|     where | ||||
|       ts = filtertxns apats $ rawLedgerTransactions l | ||||
|       ant = rawLedgerAccountNameTree l | ||||
| 
 | ||||
|       anames = flatten ant | ||||
|       txnmap = Map.union (transactionsByAccount ts) (Map.fromList [(a,[]) | a <- anames]) | ||||
|       subacctsof a = filter (a `isAccountNamePrefixOf`) anames | ||||
|       subtxnsof a = concat [txnmap ! a | a <- [a] ++ subacctsof a] | ||||
|       balmap = Map.union  | ||||
|                (Map.fromList [(a,sumTransactions $ subtxnsof a) | a <- anames])  | ||||
|                (Map.fromList [(a,Mixed []) | a <- anames]) | ||||
|       txnsof = (txnmap !) | ||||
| 
 | ||||
|       -- add subaccount-including balances to a tree of account names | ||||
|       -- somewhat efficiently | ||||
|       addbalances :: Tree AccountName -> Tree (AccountName, MixedAmount) | ||||
|       addbalances (Node a []) = Node (a,sumTransactions $ txnsof a) [] | ||||
|       addbalances (Node a subs) = Node (a,sumtxns + sumsubaccts) subbals | ||||
|           where | ||||
|             sumtxns = sumTransactions $ txnsof a | ||||
|             sumsubaccts = sum $ map (snd . root) subbals | ||||
|             subbals = map addbalances subs | ||||
|       balmap = Map.fromList $ flatten $ addbalances ant | ||||
|       balof = (balmap !) | ||||
| 
 | ||||
|       mkacct a = Account a (txnsof a) (balof a) | ||||
|       acctmap = Map.fromList [(a, mkacct a) | a <- anames] | ||||
|       mkacct a = Account a (txnmap ! a) (balmap ! a) | ||||
| 
 | ||||
| 
 | ||||
| -- | Convert a list of transactions to a map from account name to the list | ||||
| -- of all transactions in that account. | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user