Changeset: 23bcb0cddf05 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=23bcb0cddf05
Modified Files:
        gdk/gdk_sample.c
Branch: stratified_sampling
Log Message:

fix compilation errors


diffs (144 lines):

diff --git a/gdk/gdk_sample.c b/gdk/gdk_sample.c
--- a/gdk/gdk_sample.c
+++ b/gdk/gdk_sample.c
@@ -23,6 +23,8 @@
  * values that should be omitted from the sample.
  */
 
+#include <math.h>
+
 #include "monetdb_config.h"
 #include "gdk.h"
 #include "gdk_private.h"
@@ -61,6 +63,8 @@
                        siftup(OPER, i - 1, SWAP);      \
        } while (0)
 
+
+//CUSTOM SWAP AND COMPARE FUNCTION
 #define SWAP3(p1, p2)                          \
        do {                                    \
                item = oids[p1];                \
@@ -72,8 +76,8 @@
        } while (0)
 
 #define compKeysGT(p1, p2)                                                     
                                                \
-       (keys[p1] > keys[p2] ||                                                 
\
-       keys[p1] == keys[p2] && oids[p1] > oids[p2])
+       ((keys[p1] > keys[p2]) ||                                               
\
+       (keys[p1] == keys[p2] && oids[p1] > oids[p2]))
 
 /* this is a straightforward implementation of a binary tree */
 struct oidtreenode {
@@ -85,23 +89,23 @@ struct oidtreenode {
 static int
 OIDTreeMaybeInsert(struct oidtreenode *tree, oid o, BUN allocated)
 {
-       struct oidtreenode *nodep;
+       struct oidtreenode **nodep;
 
        if (allocated == 0) {
                tree->left = tree->right = NULL;
                tree->o = o;
                return 1;
        }
-       nodep = tree;
-       while (nodep) {
-               if (o == nodep->o)
+       nodep = &tree;
+       while (*nodep) {
+               if (o == (*nodep)->o)
                        return 0;
-               if (o < nodep->o)
-                       nodep = nodep->left;
+               if (o < (*nodep)->o)
+                       nodep = &(*nodep)->left;
                else
-                       nodep = nodep->right;
+                       nodep = &(*nodep)->right;
        }
-       nodep = &tree[allocated];
+       *nodep = &tree[allocated];
        tree[allocated].left = tree[allocated].right = NULL;
        tree[allocated].o = o;
        return 1;
@@ -154,7 +158,6 @@ BATsample(BAT *b, BUN n)
        struct oidtreenode *tree = NULL;
        mtwist *mt_rng;
        unsigned int range;
-       dbl random;
 
        BATcheck(b, "BATsample", NULL);
        ERRORcheck(n > BUN_MAX, "BATsample: sample size larger than BUN_MAX\n", 
NULL);
@@ -245,15 +248,13 @@ BATweightedsample(BAT *b, BUN n, BAT *w)
        oid* oids;//points to the oids in sample
        dbl* w_ptr;//TODO types of w
        dbl* keys;//keys as defined in Alg-A-exp
-       BUN cnt, i, j;
-       bit antiset;
+       BUN cnt, i;
        mtwist *mt_rng;
        BUN pos, childpos;
        oid item;
        dbl r, xw, r2, key, tw;
 
        oid minoid = b->hseqbase;
-       oid maxoid = b->hseqbase + cnt;
 
        BATcheck(b, "BATsample", NULL);
        BATcheck(w, "BATsample", NULL);
@@ -265,7 +266,6 @@ BATweightedsample(BAT *b, BUN n, BAT *w)
 
        cnt = BATcount(b);
 
-
        keys = (double*) malloc(sizeof(double)*n);
        if(keys == NULL)
                return NULL;
@@ -277,6 +277,7 @@ BATweightedsample(BAT *b, BUN n, BAT *w)
        }
 
        oids = (oid *)sample->theap.base;
+       w_ptr = (dbl*) w->theap.base;
 
        mt_rng = mtwist_new();
        mtwist_seed(mt_rng, rand());
@@ -284,26 +285,27 @@ BATweightedsample(BAT *b, BUN n, BAT *w)
        BATsetcount(sample, n);
                /* obtain sample */
        //TODO: reservoir sampling with exponential jumps
-       for(j=0; j<n; j++) {
-               oids[j] = j+minoid;
-               keys[j] = pow(mtwist_drand(mt_rng),1.0/w[j]);
+       for(i=0; i<n; i++) {
+               oids[i] = i+minoid;
+               keys[i] = pow(mtwist_drand(mt_rng),1.0/w_ptr[i]);//TODO cast 
1.0 to dbl?
        }
        heapify(compKeysGT, SWAP3);//NOTE: writes to 'i'
 
-       j=n;
+       i=n;
        while(true) {
                r = mtwist_drand(mt_rng);
                xw = log(r)/log(keys[oids[0]-minoid]);
-               while(xw > 0 && j < cnt) {
-                       xw -= w[j];
-                       j++;
+               while(xw > 0 && i < cnt) {
+                       xw -= w_ptr[i];
+                       i++;
                }
-               if(j >= cnt) break;
-               tw = pow(keys[oids[0]-minoid], w[j]);
+               if(i >= cnt) break;
+               //At this point, xw - (w_ptr[c]+w_ptr[c+1]+...+w_ptr[i]) <= 0
+               tw = pow(keys[oids[0]-minoid], w_ptr[i]);
                r2 = mtwist_drand(mt_rng)*(1-tw)+tw;
-               key = pow(r2, 1/w[j]);
+               key = pow(r2, 1/w_ptr[i]);
 
-               oids[0] = j+minoid;
+               oids[0] = i+minoid;
                keys[0] = key;
                siftup(compKeysGT, 0, SWAP3);//NOTE: writes to 'key'
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to