ObjectIndexIterator::ObjectIndexIterator(BitmapTriples *trip, TripleID &pat) : triples(trip), pattern(pat), adjY(trip->arrayY, trip->bitmapY), adjZ(trip->arrayZ, trip->bitmapZ), adjIndex(trip->arrayIndex, trip->bitmapIndex) { // Convert pattern to local order. swapComponentOrder(&pattern, SPO, triples->order); patX = pattern.getSubject(); patY = pattern.getPredicate(); patZ = pattern.getObject(); if(patZ==0) { throw std::runtime_error("This iterator is not suitable for this pattern"); } #if 0 cout << "Pattern: " << patX << " " << patY << " " << patZ << endl; cout << "AdjY: " << endl; adjY.dump(); cout << "AdjZ: " << endl; adjZ.dump(); cout << "AdjIndexObjects: " << endl; adjIndex.dump(); #endif calculateRange(); goToStart(); }
MiddleWaveletIterator::MiddleWaveletIterator(BitmapTriples *trip, TripleID &pat) : triples(trip), pattern(pat), adjY(trip->arrayY, trip->bitmapY), adjZ(trip->arrayZ, trip->bitmapZ), predicateIndex(trip->predicateIndex), predicateOcurrence(1) { // Convert pattern to local order. swapComponentOrder(&pattern, SPO, triples->order); patX = pattern.getSubject(); patY = pattern.getPredicate(); patZ = pattern.getObject(); if(patY==0) { throw std::runtime_error("This iterator is not suitable for this pattern"); } #if 0 cout << "AdjY: " << endl; adjY.dump(); cout << "AdjZ: " << endl; adjZ.dump(); cout << "Pattern: " << patX << " " << patY << " " << patZ << endl; #endif // Find largest position of Z maxZ = trip->arrayZ->getNumberOfElements(); // Find position of the first matching pattern. numOcurrences = predicateIndex->getNumAppearances(patY); goToStart(); }
/// ITERATOR CompactTriplesIterator::CompactTriplesIterator(CompactTriples *trip, TripleID &pat) : triples(trip), pattern(pat) { // Convert pattern to local order. swapComponentOrder(&pattern, SPO, triples->order); patX = pattern.getSubject(); patY = pattern.getPredicate(); patZ = pattern.getObject(); goToStart(); }
/// ITERATOR BitmapTriplesSearchIterator::BitmapTriplesSearchIterator(BitmapTriples *trip, TripleID &pat) : triples(trip), pattern(pat), adjY(trip->arrayY, trip->bitmapY), adjZ(trip->arrayZ, trip->bitmapZ) { // Convert pattern to local order. swapComponentOrder(&pattern, SPO, triples->order); patX = pattern.getSubject(); patY = pattern.getPredicate(); patZ = pattern.getObject(); #if 0 cout << "Pattern: " << patX << " " << patY << " " << patZ << endl; cout << "AdjY: " << endl; adjY.dump(); cout << "AdjZ: " << endl; adjZ.dump(); #endif #if 0 for(uint mposZ=0; mposZ<adjZ.getSize(); mposZ++) { uint z = adjZ.get(mposZ); uint posY = adjZ.findListIndex(mposZ); uint y = adjY.get(posY); uint x = adjY.findListIndex(posY)+1; cout << "FWD2 posZ: " << mposZ << " posY: " << posY << "\t"; cout << "Triple: " << x << ", " << y << ", " << z << endl; } #endif findRange(); goToStart(); }
void CompactTriples::load(ModifiableTriples &triples, ProgressListener *listener) { triples.sort(order); IteratorTripleID *it = triples.searchAll(); vector<unsigned int> vectorY, vectorZ; unsigned int lastX, lastY, lastZ; unsigned int x, y, z; // First triple if(it->hasNext()) { TripleID *triple = it->next(); swapComponentOrder(triple, SPO, order); lastX = x = triple->getSubject(); lastY = y = triple->getPredicate(); lastZ = z = triple->getObject(); vectorY.push_back(y); vectorZ.push_back(z); numTriples++; } // Rest of the triples while(it->hasNext()) { TripleID *triple = it->next(); //cout << "111> " << triple << endl; swapComponentOrder(triple, SPO, order); //cout << "222> " << triple << endl; x = triple->getSubject(); y = triple->getPredicate(); z = triple->getObject(); if(x!=lastX) { vectorY.push_back(0); vectorY.push_back(y); vectorZ.push_back(0); vectorZ.push_back(z); } else if(y!=lastY) { vectorY.push_back(y); vectorZ.push_back(0); vectorZ.push_back(z); } else { vectorZ.push_back(z); } lastX = x; lastY = y; lastZ = z; NOTIFYCOND(listener, "Converting to CompactTriples.", numTriples, triples.getNumberOfElements()); numTriples++; } delete it; VectorUIntIterator itY(vectorY); VectorUIntIterator itZ(vectorZ); streamY->add(itY); streamZ->add(itZ); #if 0 // Debug Adjacency Lists cout << "Y" << vectorY.size() << "): "; for(unsigned int i=0;i<arrayY->getNumberOfElements();i++){ cout << arrayY->get(i) << " "; } cout << endl; cout << "Z" << vectorZ.size() << "): "; for(unsigned int i=0;i<arrayZ->getNumberOfElements();i++){ cout << arrayZ->get(i) << " "; } cout << endl; #endif }
void CompactTriplesIterator::updateOutput() { // Convert local order to SPO returnTriple.setAll(x,y,z); swapComponentOrder(&returnTriple, triples->order, SPO); }
void BitmapTriplesSearchIterator::updateOutput() { // Convert local order to SPO returnTriple.setAll(x,y,z); swapComponentOrder(&returnTriple, triples->order, SPO); //cout << returnTriple << endl; }