[Gnucash-changes] replace the algo in xaccTransGetImbalance() with a higher-performance

Linas Vepstas linas at cvs.gnucash.org
Mon Jul 5 23:36:48 EDT 2004


Log Message:
-----------
replace the algo in xaccTransGetImbalance() with a higher-performance version
also, clean up some debug outp[ut printing

Modified Files:
--------------
    gnucash/src/engine:
        Transaction.c

Revision Data
-------------
Index: Transaction.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Transaction.c,v
retrieving revision 1.313
retrieving revision 1.314
diff -Lsrc/engine/Transaction.c -Lsrc/engine/Transaction.c -u -r1.313 -r1.314
--- src/engine/Transaction.c
+++ src/engine/Transaction.c
@@ -749,7 +749,7 @@
 xaccSplitSetAmount (Split *s, gnc_numeric amt) 
 {
   if(!s) return;
-  ENTER ("split=%p old amt=%lld/%lld new amt=%lld/%lld", s,
+  ENTER ("(split=%p) old amt=%lld/%lld new amt=%lld/%lld", s,
         s->amount.num, s->amount.denom, amt.num, amt.denom);
 
   check_open (s->parent);
@@ -764,7 +764,7 @@
 xaccSplitSetValue (Split *s, gnc_numeric amt) 
 {
   if(!s) return;
-  ENTER ("split=%p old val=%lld/%lld new val=%lld/%lld", s,
+  ENTER ("(split=%p) old val=%lld/%lld new val=%lld/%lld", s,
         s->value.num, s->value.denom, amt.num, amt.denom);
 
   check_open (s->parent);
@@ -1006,7 +1006,7 @@
 
   if (!trans) return;
 
-  ENTER ("addr=%p", trans);
+  ENTER ("(addr=%p)", trans);
   if (((char *) 1) == trans->num)
   {
     PERR ("double-free %p", trans);
@@ -1044,7 +1044,7 @@
   qof_instance_release (&trans->inst);
   g_free(trans);
 
-  LEAVE ("addr=%p", trans);
+  LEAVE ("(addr=%p)", trans);
 }
 
 /********************************************************************
@@ -1379,11 +1379,20 @@
 gnc_numeric
 xaccTransGetImbalance (const Transaction * trans)
 {
-  if (!trans)
-    return gnc_numeric_zero ();
+  GList *node;
+  gnc_numeric imbal = gnc_numeric_zero();
+  if (!trans) return imbal;
+
+  ENTER("(trans=%p)", trans);
 
-  return xaccSplitsComputeValue (trans->splits, NULL, 
-        trans->common_currency);
+  for (node=trans->splits; node; node=node->next)
+  {
+    Split *s = node->data;
+    imbal = gnc_numeric_add(imbal, xaccSplitGetValue(s),
+                              GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT);
+  }
+  LEAVE("(trans=%p) imbal=%s", trans, gnc_num_dbg_to_string(imbal));
+  return imbal;
 }
 
 gnc_numeric
@@ -1402,7 +1411,7 @@
     Account *a = xaccSplitGetAccount (s);
     if (a == account)
       total = gnc_numeric_add (total, xaccSplitGetValue (s),
-                               GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD);
+                               GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT);
   }
   return total;
 }
@@ -1654,7 +1663,7 @@
    trans->inst.editlevel--;
 
    gen_event_trans (trans);
-   LEAVE ("trans addr=%p\n", trans);
+   LEAVE ("(trans=%p)", trans);
 }
 
 /* Ughhh. The Rollback function is terribly complex, and, what's worse,


More information about the gnucash-changes mailing list