Changeset: 55c89bdb7eea for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=55c89bdb7eea
Modified Files:
monetdb5/extras/rdf/rdfschema.c
Branch: rdf
Log Message:
Change the way of getting values from BAT
diffs (236 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
@@ -6170,15 +6170,14 @@ str RDFgetRefCounts(int *ret, BAT *sbat,
#if NEEDSUBCS
static
-str RDFrelationships(int *ret, BAT *sbat, BATiter si, BATiter pi, BATiter oi,
+str RDFrelationships(int *ret, BAT *sbat, BAT *pbat, BAT *obat,
oid *subjCSMap, oid *subjSubCSMap, SubCSSet *csSubCSSet, CSrel
*csrelSet, BUN maxSoid, int maxNumPwithDup,int *csIdFreqIdxMap){
#else
static
-str RDFrelationships(int *ret, BAT *sbat, BATiter si, BATiter pi, BATiter oi,
+str RDFrelationships(int *ret, BAT *sbat, BAT *pbat, BAT *obat,
oid *subjCSMap, CSrel *csrelSet, BUN maxSoid, int
maxNumPwithDup,int *csIdFreqIdxMap){
#endif
- BUN p, q;
- oid *sbt = 0, *obt, *pbt;
+ oid sbt = 0, obt, pbt;
oid curS; /* current Subject oid */
//oid CSoid = 0; /* Characteristic set oid */
int numPwithDup; /* Number of properties for current S */
@@ -6191,8 +6190,9 @@ str RDFrelationships(int *ret, BAT *sbat
char isBlankNode;
oid curP;
int from, to;
-
-
+
+ oid *sbatCursor = NULL, *pbatCursor = NULL, *obatCursor =
NULL;
+ int p, first, last;
if (BATcount(sbat) == 0) {
throw(RDF, "rdf.RDFrelationships", "sbat must not be empty");
@@ -6206,13 +6206,20 @@ str RDFrelationships(int *ret, BAT *sbat
curS = 0;
curP = BUN_NONE;
- BATloop(sbat, p, q){
- sbt = (oid *) BUNtloc(si, p);
- from = csIdFreqIdxMap[subjCSMap[*sbt]];
+ sbatCursor = (oid *) Tloc(sbat, BUNfirst(sbat));
+ pbatCursor = (oid *) Tloc(pbat, BUNfirst(pbat));
+ obatCursor = (oid *) Tloc(obat, BUNfirst(obat));
+
+ first = 0;
+ last = BATcount(sbat) -1;
+
+ for (p = first; p <= last; p++){
+ sbt = sbatCursor[p];
+ from = csIdFreqIdxMap[subjCSMap[sbt]];
#if GETSUBCS_FORALL == 0
if ( from == -1) continue; /* Do not consider infrequentCS */
#endif
- if (*sbt != curS){
+ if (sbt != curS){
#if NEEDSUBCS
if (p != 0){ /* Not the first S */
returnSubCSid = addSubCS(buffTypes,
numPwithDup, subjCSMap[curS], csSubCSSet);
@@ -6222,32 +6229,32 @@ str RDFrelationships(int *ret, BAT *sbat
}
#endif
- curS = *sbt;
+ curS = sbt;
numPwithDup = 0;
curP = BUN_NONE;
}
- pbt = (oid *) BUNtloc(pi, p);
-
- obt = (oid *) BUNtloc(oi, p);
+ pbt = pbatCursor[p];
+
+ obt = obatCursor[p];
/* Check type of object */
- objType = getObjType(*obt);
+ objType = getObjType(obt);
/* Look at the referenced CS Id using subjCSMap */
isBlankNode = 0;
//if (objType == URI || objType == BLANKNODE){
if ((objType == URI || objType == BLANKNODE) && from != -1){
- realObjOid = (*obt) - ((oid) objType << (sizeof(BUN)*8
- 4));
+ realObjOid = (obt) - ((oid) objType << (sizeof(BUN)*8 -
4));
/* Only consider references to freqCS */
if (realObjOid <= maxSoid && subjCSMap[realObjOid] !=
BUN_NONE && csIdFreqIdxMap[subjCSMap[realObjOid]] != -1){
to = csIdFreqIdxMap[subjCSMap[realObjOid]];
if (objType == BLANKNODE) isBlankNode = 1;
- addReltoCSRel(from, to, *pbt, &csrelSet[from],
isBlankNode);
- }
- }
-
- if (curP == *pbt){
+ addReltoCSRel(from, to, pbt, &csrelSet[from],
isBlankNode);
+ }
+ }
+
+ if (curP == pbt){
#if USE_MULTIPLICITY == 1
// Update the object type for this P as MULTIVALUES
buffTypes[numPwithDup-1] = MULTIVALUES;
@@ -6259,14 +6266,14 @@ str RDFrelationships(int *ret, BAT *sbat
else{
buffTypes[numPwithDup] = objType;
numPwithDup++;
- curP = *pbt;
+ curP = pbt;
}
}
#if NEEDSUBCS
/* Check for the last CS */
- returnSubCSid = addSubCS(buffTypes, numPwithDup, subjCSMap[*sbt],
csSubCSSet);
- subjSubCSMap[*sbt] = returnSubCSid;
+ returnSubCSid = addSubCS(buffTypes, numPwithDup, subjCSMap[sbt],
csSubCSSet);
+ subjSubCSMap[sbt] = returnSubCSid;
#endif
free (buffTypes);
@@ -6356,11 +6363,10 @@ str addHighRefCSsToFreqCS(BAT *pOffsetBa
static
-str RDFExtractCSPropTypes(int *ret, BAT *sbat, BATiter si, BATiter pi, BATiter
oi,
+str RDFExtractCSPropTypes(int *ret, BAT *sbat, BAT *pbat, BAT *obat,
oid *subjCSMap, int* csTblIdxMapping, CSPropTypes* csPropTypes,
int maxNumPwithDup){
- BUN p, q;
- oid *sbt = 0, *obt, *pbt;
+ oid sbt , obt, pbt;
oid curS; /* current Subject oid */
//oid CSoid = 0; /* Characteristic set oid */
int numPwithDup; /* Number of properties for current S */
@@ -6370,7 +6376,10 @@ str RDFExtractCSPropTypes(int *ret, BAT
int **buffTypesCoverMV; /*Store the types of each value in
a multi-value prop */
oid* buffP;
oid curP;
- int i;
+ int i, p;
+
+ oid *sbatCursor = NULL, *pbatCursor = NULL, *obatCursor =
NULL;
+ int first, last;
buffTypes = (char *) malloc(sizeof(char) * (maxNumPwithDup + 1));
buffTypesCoverMV = (int **)malloc(sizeof(int*) * (maxNumPwithDup + 1));
@@ -6384,28 +6393,36 @@ str RDFExtractCSPropTypes(int *ret, BAT
curS = 0;
curP = BUN_NONE;
- BATloop(sbat, p, q){
- sbt = (oid *) BUNtloc(si, p);
- if (*sbt != curS){
+ sbatCursor = (oid *) Tloc(sbat, BUNfirst(sbat));
+ pbatCursor = (oid *) Tloc(pbat, BUNfirst(pbat));
+ obatCursor = (oid *) Tloc(obat, BUNfirst(obat));
+
+ first = 0;
+ last = BATcount(sbat) -1;
+
+ for (p = first; p <= last; p++){
+ sbt = sbatCursor[p];
+
+ if (sbt != curS){
if (p != 0){ /* Not the first S */
addPropTypes(buffTypes, buffP, numPwithDup,
buffCoverage, buffTypesCoverMV, subjCSMap[curS], csTblIdxMapping, csPropTypes);
}
- curS = *sbt;
+ curS = sbt;
numPwithDup = 0;
curP = BUN_NONE;
}
- obt = (oid *) BUNtloc(oi, p);
+ obt = obatCursor[p];
/* Check type of object */
- objType = getObjType(*obt); /* Get two bits 63th, 62nd from
object oid */
+ objType = getObjType(obt); /* Get two bits 63th, 62nd from
object oid */
if (objType == BLANKNODE){ //BLANKNODE object values will
be stored in the same column with URI object values
objType = URI;
}
- pbt = (oid *) BUNtloc(pi, p);
-
- if (curP == *pbt){
+ pbt = pbatCursor[p];
+
+ if (curP == pbt){
#if USE_MULTIPLICITY == 1
// Update the object type for this P as MULTIVALUES
buffTypes[numPwithDup-1] = MULTIVALUES;
@@ -6422,10 +6439,10 @@ str RDFExtractCSPropTypes(int *ret, BAT
}
buffTypesCoverMV[numPwithDup][(int)objType] = 1;
buffTypes[numPwithDup] = objType;
- buffP[numPwithDup] = *pbt;
+ buffP[numPwithDup] = pbt;
buffCoverage[numPwithDup] = 1;
numPwithDup++;
- curP = *pbt;
+ curP = pbt;
}
@@ -9167,9 +9184,9 @@ RDFextractCSwithTypes(int *ret, bat *sba
csSubCSSet = initCS_SubCSSets(*maxCSoid +1);
- RDFrelationships(ret, sbat, si, pi, oi, *subjCSMap, subjSubCSMap,
csSubCSSet, csrelSet, *maxSoid, *maxNumPwithDup, csIdFreqIdxMap);
+ RDFrelationships(ret, sbat, pbat, obat, *subjCSMap, subjSubCSMap,
csSubCSSet, csrelSet, *maxSoid, *maxNumPwithDup, csIdFreqIdxMap);
#else
- RDFrelationships(ret, sbat, si, pi, oi, *subjCSMap, csrelSet, *maxSoid,
*maxNumPwithDup, csIdFreqIdxMap);
+ RDFrelationships(ret, sbat, pbat, obat, *subjCSMap, csrelSet, *maxSoid,
*maxNumPwithDup, csIdFreqIdxMap);
#endif
curT = clock();
@@ -9202,7 +9219,7 @@ RDFextractCSwithTypes(int *ret, bat *sba
initCSPropTypesForBasicFreqCS(csPropTypes, freqCSset,
freqCSset->numCSadded);
printf("Extract CSPropTypes from basic CS's \n");
- RDFExtractCSPropTypes(ret, sbat, si, pi, oi, *subjCSMap,
csIdFreqIdxMap, csPropTypes, *maxNumPwithDup);
+ RDFExtractCSPropTypes(ret, sbat, pbat, obat, *subjCSMap,
csIdFreqIdxMap, csPropTypes, *maxNumPwithDup);
printNumTypePerProp(csPropTypes, freqCSset->numCSadded, freqCSset);
freeCSPropTypes(csPropTypes, freqCSset->numCSadded);
@@ -10851,7 +10868,7 @@ RDFreorganize(int *ret, CStableStat *cst
initCSPropTypes(csPropTypes, freqCSset, numTables, labels);
printf("Extract CSPropTypes \n");
- RDFExtractCSPropTypes(ret, sbat, si, pi, oi, subjCSMap,
csTblIdxMapping, csPropTypes, maxNumPwithDup);
+ RDFExtractCSPropTypes(ret, sbat, pbat, obat, subjCSMap,
csTblIdxMapping, csPropTypes, maxNumPwithDup);
genCSPropTypesColIdx(csPropTypes, numTables, freqCSset);
#if NO_OUTPUTFILE == 0
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list