/*------------------------------------------------------------------------------ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team * * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ #ifndef _lucene_index_SegmentTermEnum_ #define _lucene_index_SegmentTermEnum_ #if defined(_LUCENE_PRAGMA_ONCE) # pragma once #endif #include "Terms.h" #include "FieldInfos.h" #include "TermInfo.h" CL_NS_DEF(index) /** * SegmentTermEnum is an enumeration of all Terms and TermInfos */ class SegmentTermEnum:public TermEnum{ private: Term* _term; ///points to the current Term in the enumeration TermInfo* termInfo; ///points to the TermInfo matching the current Term in the enumeration bool isIndex; ///Indicates if the Segment is a an index bool isClone; ///Indicates if SegmentTermEnum is an orignal instance or ///a clone of another SegmentTermEnum TCHAR* buffer; ///The buffer that contains the data read from the Term Infos File uint32_t bufferLength; ///Length of the buffer int32_t format; int32_t formatM1SkipInterval; CL_NS(store)::IndexInput* input; ///The IndexInput that reads from the Term Infos File FieldInfos* fieldInfos; ///contains the Field Infos for the segment int64_t size; ///The size of the enumeration int64_t position; ///The position of the current (term) in the enumeration int64_t indexPointer; Term* prev; ///The previous current int32_t indexInterval; int32_t skipInterval; friend class TermInfosReader; friend class SegmentTermDocs; protected: /** * Constructor. * The instance is created by cloning all properties of clone */ SegmentTermEnum( const SegmentTermEnum& clone); public: ///Constructor SegmentTermEnum(CL_NS(store)::IndexInput* i, FieldInfos* fis, const bool isi ); ///Destructor ~SegmentTermEnum(); /** * Moves the current of the set to the next in the set */ bool next(); /** * Returns a pointer to the current term. */ Term* term(); /** * Returns the current term. */ Term* term(bool pointer); /** * Scan for Term term without allocating new Terms */ void scanTo(const Term *term); /** * Closes the enumeration to further activity, freeing resources. */ void close(); /** * Returns the document frequency of the current term in the set */ int32_t docFreq() const; /** * Repositions term and termInfo within the enumeration */ void seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti); /** * Returns a clone of the current termInfo */ TermInfo* getTermInfo()const; /** * Retrieves a clone of termInfo through the reference ti */ void getTermInfo(TermInfo* ti)const; /** * Returns the freqPointer from the current TermInfo in the enumeration. */ int64_t freqPointer() const; /** * Returns the proxPointer from the current TermInfo in the enumeration. */ int64_t proxPointer() const; /** * Returns a clone of this instance */ SegmentTermEnum* clone() const; const char* getObjectName(){ return SegmentTermEnum::getClassName(); } static const char* getClassName(){ return "SegmentTermEnum"; } private: /** * Reads the next term in the enumeration */ Term* readTerm(Term* reuse); /** * Instantiate a buffer of length length+1 */ void growBuffer(const uint32_t length, bool force_copy); }; CL_NS_END #endif