Add new pa_reduce() and pa_gcd() functions
authorLennart Poettering <lennart@poettering.net>
Sat, 10 Jan 2009 01:53:57 +0000 (02:53 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 10 Jan 2009 01:53:57 +0000 (02:53 +0100)
src/pulsecore/core-util.c
src/pulsecore/core-util.h

index dde34d7..6f31566 100644 (file)
@@ -2487,3 +2487,27 @@ pa_bool_t pa_in_valgrind(void) {
     return b > 1;
 }
 #endif
+
+unsigned pa_gcd(unsigned a, unsigned b) {
+
+    while (b > 0) {
+        unsigned t = b;
+        b = a % b;
+        a = t;
+    }
+
+    return a;
+}
+
+void pa_reduce(unsigned *num, unsigned *den) {
+
+    unsigned gcd = pa_gcd(*num, *den);
+
+    if (gcd <= 0)
+        return;
+
+    *num /= gcd;
+    *den /= gcd;
+
+    pa_assert(pa_gcd(*num, *den) == 1);
+}
index fd6ee89..d9fad11 100644 (file)
@@ -206,4 +206,7 @@ static inline pa_bool_t pa_in_valgrind(void) {
 }
 #endif
 
+unsigned pa_gcd(unsigned a, unsigned b);
+void pa_reduce(unsigned *num, unsigned *den);
+
 #endif