]> git.sesse.net Git - foosball/commitdiff
Add a SWIG interface, to be able to run recalc-single-result faster.
authorSteinar H. Gunderson <sesse@debian.org>
Sun, 9 Dec 2007 15:14:22 +0000 (16:14 +0100)
committerSteinar H. Gunderson <sesse@debian.org>
Sun, 9 Dec 2007 15:14:22 +0000 (16:14 +0100)
foosrank.cpp
foosrank.i [new file with mode: 0644]
recalc-single-result.pl

index 4d09eb5d4a992e26e618a00f1bea1ade54cc07c8..b9208fd86b230e1ec950447f66f508d99ea00351 100644 (file)
@@ -366,7 +366,7 @@ static void least_squares(const vector<pair<double, double> > &curve, double mu1
        *sigma_result = sigma;
 }
 
-static void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability)
+void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability)
 {
        vector<pair<double, double> > curve;
 
diff --git a/foosrank.i b/foosrank.i
new file mode 100644 (file)
index 0000000..4b6b466
--- /dev/null
@@ -0,0 +1,20 @@
+%module foosrank
+%{
+void fftw_import_wisdom_from_file(FILE*);
+void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability);
+void startup() {
+        FILE *fp = fopen("fftw-wisdom", "rb");
+        if (fp != NULL) {
+                fftw_import_wisdom_from_file(fp);
+                fclose(fp);
+        }
+} 
+%}
+%perlcode %{
+        sub import {
+                startup();
+       }
+%}
+
+//extern void import();
+extern void compute_new_rating(double, double, double, double, int, int, double *OUTPUT, double *OUTPUT, double *OUTPUT);
index efcd4c73891ef5a8af3aec31a168596261180bf0..b6f8b779db39b233eff5e6054326a1c964978778 100755 (executable)
@@ -5,6 +5,7 @@ use DBI;
 use CGI;
 use CGI::Carp qw(fatalsToBrowser);
 require 'foosball.pm';
+use foosrank;
 no warnings 'once';
 
 my $dryrun = 0;
@@ -47,8 +48,8 @@ while (my $ref = $q->fetchrow_hashref) {
        $rd1 = foosball::apply_aging($rd1, $age1 / 86400.0);
        $rd2 = foosball::apply_aging($rd2, $age2 / 86400.0);
 
-       my ($newr1, $newrd1, $likelihood) = foosball::calc_rating($rating1, $rd1, $rating2, $rd2, $score1, $score2);
-       my ($newr2, $newrd2) = foosball::calc_rating($rating2, $rd2, $rating1, $rd1, $score2, $score1);
+       my ($newr1, $newrd1, $likelihood) = foosrank::compute_new_rating($rating1, $rd1, $rating2, $rd2, $score1, $score2);
+       my ($newr2, $newrd2) = foosrank::compute_new_rating($rating2, $rd2, $rating1, $rd1, $score2, $score1);
 
        $cll += log($likelihood);