[Gnucash-changes] add function to compare (order) two numbers

Linas Vepstas linas at cvs.gnucash.org
Sat Jul 3 23:55:16 EDT 2004


Log Message:
-----------
add function to compare (order) two numbers

Modified Files:
--------------
    gnucash/src/engine:
        qofmath128.h
        qofmath128.c

Revision Data
-------------
Index: qofmath128.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofmath128.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -Lsrc/engine/qofmath128.h -Lsrc/engine/qofmath128.h -u -r1.3 -r1.4
--- src/engine/qofmath128.h
+++ src/engine/qofmath128.h
@@ -42,6 +42,9 @@
 /** Return true of two numbers are equal */
 inline gboolean equal128 (qofint128 a, qofint128 b);
 
+/** Return returns 1 if a>b, -1 if b>a, 0 if a == b */
+inline int cmp128 (qofint128 a, qofint128 b);
+
 /** Shift right by one bit (i.e. divide by two) */
 inline qofint128 shift128 (qofint128 x);
 
Index: qofmath128.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofmath128.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -Lsrc/engine/qofmath128.c -Lsrc/engine/qofmath128.c -u -r1.5 -r1.6
--- src/engine/qofmath128.c
+++ src/engine/qofmath128.c
@@ -231,6 +231,28 @@
 	return 1;
 }
 
+/** Return returns 1 if a>b, -1 if b>a, 0 if a == b */
+inline int
+cmp128 (qofint128 a, qofint128 b)
+{
+   if ((0 == a.isneg) && b.isneg) return 1;
+   if (a.isneg && (0 == b.isneg)) return -1;
+   if (0 == a.isneg)
+   {
+     if (a.hi > b.hi) return 1;
+     if (a.hi < b.hi) return -1;
+     if (a.lo > b.lo) return 1;
+     if (a.lo < b.lo) return -1;
+     return 0;
+   }
+
+   if (a.hi > b.hi) return -1;
+   if (a.hi < b.hi) return 1;
+   if (a.lo > b.lo) return -1;
+   if (a.lo < b.lo) return 1;
+   return 0;
+}
+
 /** Return the greatest common factor of two 64-bit numbers */
 inline guint64
 gcf64(guint64 num, guint64 denom)


More information about the gnucash-changes mailing list