SegmentTermEnum::SegmentTermEnum(IndexInput* i, FieldInfos* fis, const bool isi): fieldInfos(fis){ //Func - Constructor //Pre - i holds a reference to an instance of IndexInput // fis holds a reference to an instance of FieldInfos // isi //Post - An instance of SegmentTermEnum has been created input = i; position = -1; //Instantiate a Term with empty field, empty text and which is interned (see term.h what interned means) _term = _CLNEW Term; isIndex = isi; termInfo = _CLNEW TermInfo(); indexPointer = 0; buffer = NULL; bufferLength = 0; prev = NULL; formatM1SkipInterval = 0; //Set isClone to false as the instance is not clone of another instance isClone = false; int32_t firstInt = input->readInt(); if (firstInt >= 0) { // original-format file, without explicit format version number format = 0; size = firstInt; // back-compatible settings indexInterval = 128; skipInterval = LUCENE_INT32_MAX_SHOULDBE; // switch off skipTo optimization } else { // we have a format version number format = firstInt; // check that it is a format we can understand if (format < TermInfosWriter::FORMAT){ TCHAR err[30]; _sntprintf(err,30,_T("Unknown format version: %d"), format); _CLTHROWT(CL_ERR_Runtime,err); } size = input->readLong(); // read the size if(format == -1){ if (!isIndex) { indexInterval = input->readInt(); formatM1SkipInterval = input->readInt(); } // switch off skipTo optimization for file format prior to 1.4rc2 in order to avoid a bug in // skipTo implementation of these versions skipInterval = LUCENE_INT32_MAX_SHOULDBE; }else{ indexInterval = input->readInt(); skipInterval = input->readInt(); } } }
TermInfo* SegmentTermEnum::getTermInfo()const { //Func - Returns a clone of the current termInfo //Pre - termInfo != NULL // next() must have been called once //Post - A clone of the current termInfo has been returned return _CLNEW TermInfo(*termInfo); //clone }
void Reader::searchInIndex(const QStringList &terms) { foreach (const QString term, terms) { QVector<Document> documents; for(IndexTable::ConstIterator it = searchIndexTable.begin(); it != searchIndexTable.end(); ++it) { EntryTable entryTable = it.value().first; DocumentList documentList = it.value().second; if (term.contains(QLatin1Char('*'))) documents = setupDummyTerm(getWildcardTerms(term, entryTable), entryTable); else if (entryTable.value(term)) documents = entryTable.value(term)->documents; else continue; if (!documents.isEmpty()) { DocumentInfo info; QString title, url; QVector<DocumentInfo> documentsInfo; foreach(const Document doc, documents) { info.docNumber = doc.docNumber; info.frequency = doc.frequency; info.documentUrl = documentList.at(doc.docNumber).at(1); info.documentTitle = documentList.at(doc.docNumber).at(0); documentsInfo.append(info); } bool found = false; for(QList<TermInfo>::Iterator tit = termList.begin(); tit != termList.end(); ++tit) { TermInfo *t = &(*tit); if(t->term == term) { t->documents += documentsInfo; t->frequency += documentsInfo.count(); found = true; break; } } if (!found) termList.append(TermInfo(term, documentsInfo.count(), documentsInfo)); }
SegmentTermEnum::SegmentTermEnum(const SegmentTermEnum& clone): fieldInfos(clone.fieldInfos) { //Func - Constructor // The instance is created by cloning all properties of clone //Pre - clone holds a valid reference to SegmentTermEnum //Post - An instance of SegmentTermEnum with the same properties as clone input = clone.input->clone(); //Copy the postion from the clone position = clone.position; if ( clone._term != NULL ){ _term = _CLNEW Term; _term->set(clone._term,clone._term->text()); }else _term = NULL; isIndex = clone.isIndex; termInfo = _CLNEW TermInfo(clone.termInfo); indexPointer = clone.indexPointer; buffer = clone.buffer==NULL?NULL:(TCHAR*)malloc(sizeof(TCHAR) * (clone.bufferLength+1)); bufferLength = clone.bufferLength; prev = clone.prev==NULL?NULL:_CLNEW Term(clone.prev->field(),clone.prev->text(),false); size = clone.size; format = clone.format; indexInterval= clone.indexInterval; skipInterval = clone.skipInterval; formatM1SkipInterval = clone.formatM1SkipInterval; maxSkipLevels = clone.maxSkipLevels; //Set isClone to true as this instance is a clone of another instance isClone = true; //Copy the contents of buffer of clone to the buffer of this instance if ( clone.buffer != NULL ) memcpy(buffer,clone.buffer,bufferLength * sizeof(TCHAR)); }