DocIdBitSet提供基本的数据,以及构造一个DocIdSetIterator 来供外界访问自己。DocId存储在BitSet中的dynamic_bitset中,使用find_next来找到下一个bit为1的doc,也就是存在的doc。这种结构适合于只存储doc id的情形。如果要存储当前分词在本doc中的文本分,这个结构就不适合。
/// Simple DocIdSet and DocIdSetIterator backed by a BitSet class LPPAPI DocIdBitSet : public DocIdSet { public: DocIdBitSet(); DocIdBitSet(const BitSetPtr& bitSet); virtual ~DocIdBitSet(); LUCENE_CLASS(DocIdBitSet); protected: BitSetPtr bitSet; public: virtual DocIdSetIteratorPtr iterator(); /// This DocIdSet implementation is cacheable. virtual bool isCacheable(); /// Returns the underlying BitSet. BitSetPtr getBitSet(); virtual bool equals(const LuceneObjectPtr& other); virtual int32_t hashCode(); virtual LuceneObjectPtr clone(const LuceneObjectPtr& other = LuceneObjectPtr()); }; class DocIdBitSetIterator : public DocIdSetIterator { public: DocIdBitSetIterator(const BitSetPtr& bitSet); virtual ~DocIdBitSetIterator(); LUCENE_CLASS(DocIdBitSetIterator); protected: int32_t docId; BitSetPtr bitSet; public: virtual int32_t docID(); virtual int32_t nextDoc(); virtual int32_t advance(int32_t target); };
