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(); } } }
HitDoc* Hits::getHitDoc(const size_t n){ if (n >= _length){ TCHAR buf[100]; _sntprintf(buf, 100,_T("Not a valid hit number: %d"),n); _CLTHROWT(CL_ERR_IndexOutOfBounds, buf ); } if (n >= hitDocs.size()) getMoreDocs(n); return hitDocs[n]; }
void SegmentInfos::read(Directory* directory) { //Func - Reads segments file that resides in directory. //Pre - directory contains a valid reference //Post - The segments file has been read and for each segment found // a SegmentsInfo intance has been created and stored. //Open an IndexInput to the segments file and check if valid IndexInput* input = directory->openInput(QLatin1String("segments")); if (input) { try { int32_t format = input->readInt(); // file contains explicit format info if (format < 0) { // check that it is a format we can understand if (format < FORMAT) { TCHAR err[30]; _sntprintf(err, 30, _T("Unknown format version: %d"), format); _CLTHROWT(CL_ERR_Runtime, err); } // read version version = input->readLong(); // read counter counter = input->readInt(); } else { // file is in old format without explicit format info counter = format; } //Temporary variable for storing the name of the segment char aname[CL_MAX_PATH] = { 0 }; TCHAR tname[CL_MAX_PATH] = { 0 }; //read segmentInfos for (int32_t i = input->readInt(); i > 0; --i) { // read the name of the segment input->readString(tname, CL_MAX_PATH); STRCPY_TtoA(aname, tname, CL_MAX_PATH); //Instantiate a new SegmentInfo Instance SegmentInfo* si = _CLNEW SegmentInfo(QLatin1String(aname), input->readInt(), directory); //Condition check to see if si points to an instance CND_CONDITION(si != NULL, "Memory allocation for si failed") ; //store SegmentInfo si infos.push_back(si); } if (format >= 0) { // in old format the version number may be at the end of the file if (input->getFilePointer() >= input->length()) { // old file format without version number version = Misc::currentTimeMillis(); } else { // read version version = input->readLong(); } } } _CLFINALLY ( //destroy the inputStream input. The destructor of IndexInput will //also close the Inputstream input _CLDELETE(input); ); }