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);
};