[Gnucash-changes] Improve speed of generic importer.

Christian Stimming cstim at cvs.gnucash.org
Sun Oct 16 08:52:13 EDT 2005


Log Message:
-----------
Improve speed of generic importer.

2005-10-16  Christian Stimming  <stimming at tuhh.de>

	* src/import-export/import-backend.c: Improve speed of general
	importer.

Tags:
----
gnucash-gnome2-dev

Modified Files:
--------------
    gnucash:
        ChangeLog
    gnucash/src/import-export:
        import-backend.c

Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1487.2.343
retrieving revision 1.1487.2.344
diff -LChangeLog -LChangeLog -u -r1.1487.2.343 -r1.1487.2.344
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,8 @@
+2005-10-16  Christian Stimming  <stimming at tuhh.de>
+
+	* src/import-export/import-backend.c: Improve speed of general
+	importer.
+
 2005-10-16  Neil Williams <linux at codehelp.co.uk>
 
 	* src/bin/generate-gnc-script: Reversing Didier Vidal's
Index: import-backend.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/import-export/import-backend.c,v
retrieving revision 1.19.2.11
retrieving revision 1.19.2.12
diff -Lsrc/import-export/import-backend.c -Lsrc/import-export/import-backend.c -u -r1.19.2.11 -r1.19.2.12
--- src/import-export/import-backend.c
+++ src/import-export/import-backend.c
@@ -130,7 +130,7 @@
 gnc_import_TransInfo_is_balanced (const GNCImportTransInfo *info)
 {
  g_assert (info);
- if(gnc_numeric_equal(xaccTransGetImbalance(gnc_import_TransInfo_get_trans(info)),gnc_numeric_zero()))
+ if(gnc_numeric_zero_p(xaccTransGetImbalance(gnc_import_TransInfo_get_trans(info))))
    {
      return TRUE;
    }
@@ -282,6 +282,7 @@
   gchar * red_color_str = g_strdup_printf("r c red");
   gchar * black_color_str = g_strdup_printf("b c black");
   gchar * xpm[2+num_colors+height];
+  gint add_threshold, clear_threshold;
 
   g_assert(settings);
   g_assert(widget);
@@ -302,7 +303,9 @@
   xpm[3]=yellow_color_str;
   xpm[4]=red_color_str; 
   xpm[5]=black_color_str;
-  
+  add_threshold = gnc_import_Settings_get_add_threshold(settings);
+  clear_threshold = gnc_import_Settings_get_clear_threshold(settings);
+
   for(i=0;i<height;i++)
     {
       xpm[num_colors+1+i]= g_new0(char,(width_each_bar*score)+width_first_bar+1);
@@ -325,11 +328,11 @@
 		{
 		  strcat(xpm[num_colors+1+i],black_first_bar);
 		}
-	      else if (j<=gnc_import_Settings_get_add_threshold(settings))
+	      else if (j <= add_threshold)
 		{
 		  strcat(xpm[num_colors+1+i],red_bar);
 		}
-	      else if (j>=gnc_import_Settings_get_clear_threshold(settings))
+	      else if (j >= clear_threshold)
 		{
 		  strcat(xpm[num_colors+1+i],green_bar);
 		}
@@ -586,6 +589,7 @@
       double downloaded_split_amount, match_split_amount;
       time_t match_time, download_time;
       int datediff_day;
+      Transaction *new_trans = gnc_import_TransInfo_get_trans (trans_info);
     
       /* Matching heuristics */
     
@@ -596,9 +600,11 @@
       /*DEBUG(" downloaded_split_amount=%f", downloaded_split_amount);*/
       match_split_amount = gnc_numeric_to_double(xaccSplitGetAmount(split));
       /*DEBUG(" match_split_amount=%f", match_split_amount);*/
-      if(gnc_numeric_equal(xaccSplitGetAmount
-			   (gnc_import_TransInfo_get_fsplit (trans_info)),
-			   xaccSplitGetAmount(split)))
+      if(downloaded_split_amount == match_split_amount)
+	/*if (gnc_numeric_equal(xaccSplitGetAmount
+	  (gnc_import_TransInfo_get_fsplit (trans_info)),
+	  xaccSplitGetAmount(split))) 
+	  -- gnc_numeric_equal is an expensive function call */
 	{
 	  prob = prob+3;
 	  /*DEBUG("heuristics:  probability + 3 (amount)");*/
@@ -623,8 +629,7 @@
       
       /* Date heuristics */
       match_time = xaccTransGetDate (xaccSplitGetParent (split));
-      download_time = 
-	xaccTransGetDate (gnc_import_TransInfo_get_trans (trans_info));
+      download_time = xaccTransGetDate (new_trans);
       datediff_day = abs(match_time - download_time)/86400;
       /* Sorry, there are not really functions around at all that
 	 provide for less hacky calculation of days of date
@@ -655,10 +660,9 @@
 	}
       
       /* Check number heuristics */  
-      if(strlen(xaccTransGetNum(gnc_import_TransInfo_get_trans (trans_info)))!=0)
+      if(strlen(xaccTransGetNum(new_trans))!=0)
 	{     
-	  if((strcmp(xaccTransGetNum
-		     (gnc_import_TransInfo_get_trans (trans_info)),
+	  if((strcmp(xaccTransGetNum (new_trans),
 		     xaccTransGetNum(xaccSplitGetParent(split)))
 	      ==0))
 	    {	
@@ -666,7 +670,7 @@
 	      prob = prob+4;
 	      /*DEBUG("heuristics:  probability + 5 (Check number)");*/
 	    }
-	  else if(strlen(xaccTransGetNum(gnc_import_TransInfo_get_trans (trans_info))) > 0 &&
+	  else if(strlen(xaccTransGetNum(new_trans)) > 0 &&
 		  strlen(xaccTransGetNum(xaccSplitGetParent(split))) > 0)
 	    {
 	      /* If both number are not empty yet do not match, add a little extre penality */
@@ -700,10 +704,9 @@
 	}
 
       /* Description heuristics */  
-      if(strlen(xaccTransGetDescription(gnc_import_TransInfo_get_trans (trans_info)))!=0)
+      if(strlen(xaccTransGetDescription(new_trans))!=0)
 	{
-	  if((strcmp(xaccTransGetDescription
-		     (gnc_import_TransInfo_get_trans (trans_info)),
+	  if((strcmp(xaccTransGetDescription (new_trans),
 		     xaccTransGetDescription(xaccSplitGetParent(split)))
 	      ==0))
 	    {	
@@ -711,11 +714,9 @@
 	      prob = prob+2;
 	      /*DEBUG("heuristics:  probability + 2 (description)");*/
 	    }
-	  else if((strncmp(xaccTransGetDescription
-			   (gnc_import_TransInfo_get_trans (trans_info)),
-			   xaccTransGetDescription(xaccSplitGetParent(split)),
-			   strlen(xaccTransGetDescription
-				  (gnc_import_TransInfo_get_trans (trans_info)))/2)
+	  else if((strncmp(xaccTransGetDescription (new_trans),
+			   xaccTransGetDescription (xaccSplitGetParent(split)),
+			   strlen(xaccTransGetDescription (new_trans))/2)
 		   ==0))
 	    {
 	      /* Very primitive fuzzy match worth +1.  This matches the


More information about the gnucash-changes mailing list