Changeset: 77c0fa73eba0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=77c0fa73eba0
Modified Files:
        monetdb5/extras/rdf/rdfschema.c
        monetdb5/extras/rdf/rdfschema.h
Branch: rdf
Log Message:

Fix bug in rule S1 and S6.

This is caused by using the same variable in a nested loop.


diffs (125 lines):

diff --git a/monetdb5/extras/rdf/rdfschema.c b/monetdb5/extras/rdf/rdfschema.c
--- a/monetdb5/extras/rdf/rdfschema.c
+++ b/monetdb5/extras/rdf/rdfschema.c
@@ -2461,13 +2461,15 @@ void buildLabelStat(LabelStat *labelStat
        int     freqIdx;
        int     numDummy = 0; 
        int     numCheck = 0;
+       oid     candidate; 
 
        //Preparation
        for (i = 0; i  < freqCSset->numCSadded; i++){
                if (labels[i].name != BUN_NONE){
                        numCheck = (labels[i].candidatesCount > 
k)?k:labels[i].candidatesCount;
                        for (j = 0; j < numCheck; j++){
-                               bun = 
BUNfnd(BATmirror(labelStat->labelBat),(ptr) &labels[i].candidates[j]);
+                               candidate = labels[i].candidates[j];
+                               bun = 
BUNfnd(BATmirror(labelStat->labelBat),(ptr) &candidate);
                                if (bun == BUN_NONE) {
                                        /*New string*/
                                        if (labelStat->labelBat->T->hash && 
BATcount(labelStat->labelBat) > 4 * labelStat->labelBat->T->hash->mask) {
@@ -2475,7 +2477,7 @@ void buildLabelStat(LabelStat *labelStat
                                                
BAThash(BATmirror(labelStat->labelBat), 2*BATcount(labelStat->labelBat));
                                        }
 
-                                       labelStat->labelBat = 
BUNappend(labelStat->labelBat, (ptr) &labels[i].candidates[j], TRUE);
+                                       labelStat->labelBat = 
BUNappend(labelStat->labelBat, (ptr) &candidate, TRUE);
                                                        
                                        if(labelStat->numLabeladded == 
labelStat->numAllocation) 
                                        { 
@@ -2514,7 +2516,8 @@ void buildLabelStat(LabelStat *labelStat
                if (labels[i].name != BUN_NONE){
                        numCheck = (labels[i].candidatesCount > 
k)?k:labels[i].candidatesCount;
                        for (j = 0; j < numCheck; j++){
-                               bun = 
BUNfnd(BATmirror(labelStat->labelBat),(ptr) &labels[i].candidates[j]);
+                               candidate = labels[i].candidates[j];
+                               bun = 
BUNfnd(BATmirror(labelStat->labelBat),(ptr) &candidate);
                                if (bun == BUN_NONE) {
                                        fprintf(stderr, "All the name should be 
stored already!\n");
                                }
@@ -2526,6 +2529,7 @@ void buildLabelStat(LabelStat *labelStat
                        }
                }
        }
+
 }
 static 
 void freeLabelStat(LabelStat *labelStat){
@@ -2544,7 +2548,7 @@ void freeLabelStat(LabelStat *labelStat)
 
 static
 void mergeMaxFreqCSByS1(CSset *freqCSset, CSlabel* labels, oid *mergecsId){
-       int             i,k; 
+       int             i,k,j; 
        int             freqId1, freqId2;
 
        CS              *mergecs;
@@ -2555,14 +2559,15 @@ void mergeMaxFreqCSByS1(CSset *freqCSset
 
        labelStat = initLabelStat(); 
        buildLabelStat(labelStat, labels, freqCSset, TOPK);
+       printf("Num FreqCSadded before using S1 = %d \n", 
freqCSset->numCSadded);
 
        for (i = 0; i < labelStat->numLabeladded; i++){
                if (labelStat->lstCount[i] > 1){
                        /*TODO: Multi-way merge */
                        freqId1 = labelStat->freqIdList[i][0];
                        cs1 = (CS*) &(freqCSset->items[freqId1]);
-                       for (k = 1; k < labelStat->lstCount[i]; k++){
-                               freqId2 = labelStat->freqIdList[i][k];
+                       for (j = 1; j < labelStat->lstCount[i]; j++){
+                               freqId2 = labelStat->freqIdList[i][j];
                                cs2 = (CS*) &(freqCSset->items[freqId2]);
                                //Check whether these CS's belong to any mergeCS
                                if (cs1->parentFreqIdx == -1 && 
cs2->parentFreqIdx == -1){      /* New merge */
@@ -2604,6 +2609,18 @@ void mergeMaxFreqCSByS1(CSset *freqCSset
                }
        }
 
+       printf("labelStat->numLabeladded = %d \n", labelStat->numLabeladded);
+       printf("Num FreqCSadded after using S1 = %d \n", freqCSset->numCSadded);
+       {
+       int numMergeCSinOrig = 0;
+       for (i = 0; i < freqCSset->numOrigFreqCS; i++){
+               if (freqCSset->items[i].parentFreqIdx == -1){
+                       numMergeCSinOrig++;
+               }
+       }
+       printf("Num mergeCS in orgirinalFreqCSset after using S1 = %d \n", 
numMergeCSinOrig);
+       }
+
        freeLabelStat(labelStat);
 }
 
@@ -2615,7 +2632,7 @@ void mergeMaxFreqCSByS6(CSrel *csrelMerg
        //CS*           cs1;
        CSrelSum        *csRelSum; 
        int             maxNumRefPerCS = 0; 
-       int             j, k; 
+       int             j, k, m; 
 
        CS              *mergecs;
        oid             existMergecsId = BUN_NONE; 
@@ -2694,8 +2711,8 @@ void mergeMaxFreqCSByS6(CSrel *csrelMerg
                                                        
mergeTwomergeCS(mergecs1, mergecs2, cs1->parentFreqIdx);
 
                                                        //Re-map for all maxCS 
in mergecs2
-                                                       for (k = 0; k < 
mergecs2->numConsistsOf; k++){
-                                                               
freqCSset->items[mergecs2->lstConsistsOf[k]].parentFreqIdx = cs1->parentFreqIdx;
+                                                       for (m = 0; m < 
mergecs2->numConsistsOf; m++){
+                                                               
freqCSset->items[mergecs2->lstConsistsOf[m]].parentFreqIdx = cs1->parentFreqIdx;
                                                        }
                                                }
 
diff --git a/monetdb5/extras/rdf/rdfschema.h b/monetdb5/extras/rdf/rdfschema.h
--- a/monetdb5/extras/rdf/rdfschema.h
+++ b/monetdb5/extras/rdf/rdfschema.h
@@ -102,7 +102,7 @@ typedef struct PropStat {
 
 #define USE_LABEL_FINDING_MAXCS        0       // Use the labels received from 
labeling process for finding maxCS 
 #define USE_LABEL_FOR_MERGING  1       // Use the labels received from 
labeling process for finding mergeCS
-#define TOPK   1                       //Check top 3 candidate
+#define TOPK 2                 //Check top 3 candidate
 
 typedef struct CS
 {
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to