Skip to content

Commit

Permalink
[opt](position) add position iterator interface
Browse files Browse the repository at this point in the history
  • Loading branch information
zzzxl1993 committed Jun 29, 2024
1 parent 51f1572 commit f5090d7
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 34 deletions.
4 changes: 2 additions & 2 deletions src/core/CLucene/index/SegmentTermDocs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
CL_NS_DEF(index)

SegmentTermDocs::SegmentTermDocs(const SegmentReader *_parent) : parent(_parent), freqStream(_parent->freqStream->clone()),
count(0), df(0), deletedDocs(_parent->deletedDocs), _doc(0), _freq(0), skipInterval(_parent->tis->getSkipInterval()),
count(0), df(0), deletedDocs(_parent->deletedDocs), _doc(-1), _freq(0), skipInterval(_parent->tis->getSkipInterval()),
maxSkipLevels(_parent->tis->getMaxSkipLevels()), skipListReader(NULL), freqBasePointer(0), proxBasePointer(0),
skipPointer(0), haveSkipped(false), pointer(0), pointerMax(0), indexVersion_(_parent->_fieldInfos->getIndexVersion()),
hasProx(_parent->_fieldInfos->hasProx()), buffer_(freqStream, hasProx, indexVersion_) {
Expand Down Expand Up @@ -73,7 +73,7 @@ void SegmentTermDocs::seek(const TermInfo *ti, Term *term) {
df = 0;
} else {// punt case
df = ti->docFreq;
_doc = 0;
_doc = -1;
freqBasePointer = ti->freqPointer;
proxBasePointer = ti->proxPointer;
skipPointer = freqBasePointer + ti->skipOffset;
Expand Down
4 changes: 2 additions & 2 deletions src/core/CLucene/index/_SegmentHeader.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ class SegmentTermDocs:public virtual TermDocs {
int32_t count;
int32_t df;
CL_NS(util)::BitSet* deletedDocs;
int32_t _doc;
int32_t _freq;
int32_t _doc = -1;
int32_t _freq = 0;
int32_t docs[PFOR_BLOCK_SIZE]; // buffered doc numbers
int32_t freqs[PFOR_BLOCK_SIZE]; // buffered term freqs
int32_t pointer;
Expand Down
16 changes: 0 additions & 16 deletions src/core/CLucene/search/query/DcoIdSetIterator.h

This file was deleted.

29 changes: 16 additions & 13 deletions src/core/CLucene/search/query/TermIterator.h
Original file line number Diff line number Diff line change
@@ -1,51 +1,54 @@
#pragma once

#include "CLucene/search/query/DcoIdSetIterator.h"
#include "CLucene/index/Terms.h"

#include <limits.h>
#include <cstdint>

CL_NS_USE(index)

class TermIterator : public DocIdSetIterator {
class TermIterator {
public:
TermIterator() = default;
TermIterator(TermDocs* termDocs) : termDocs_(termDocs) {
TermIterator(TermDocs* termDocs)
: termDocs_(termDocs) {
}

virtual ~TermIterator() = default;

bool isEmpty() {
inline bool isEmpty() const {
return termDocs_ == nullptr;
}

int32_t docID() override {
uint32_t docId = termDocs_->doc();
inline int32_t docID() const {
int32_t docId = termDocs_->doc();
return docId >= INT_MAX ? INT_MAX : docId;
}

int32_t nextDoc() override {
inline int32_t freq() const {
return termDocs_->freq();
}

inline int32_t nextDoc() const {
if (termDocs_->next()) {
return termDocs_->doc();
}
return INT_MAX;
}

int32_t advance(int32_t target) override {
inline int32_t advance(int32_t target) const {
if (termDocs_->skipTo(target)) {
return termDocs_->doc();
}
return INT_MAX;
}

int32_t docFreq() const override {
inline int32_t docFreq() const {
return termDocs_->docFreq();
}

bool readRange(DocRange* docRange) const override {
inline bool readRange(DocRange* docRange) const {
return termDocs_->readRange(docRange);
}

private:
protected:
TermDocs* termDocs_ = nullptr;
};
23 changes: 23 additions & 0 deletions src/core/CLucene/search/query/TermPositionIterator.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#pragma once

#include "CLucene/search/query/TermIterator.h"
#include "CLucene/index/Terms.h"

#include <limits.h>

CL_NS_USE(index)

class TermPositionIterator : public TermIterator {
public:
TermPositionIterator() = default;
TermPositionIterator(TermPositions* termPositions)
: TermIterator(termPositions), termPositions_(termPositions) {
}

inline int32_t nextPosition() const {
return termPositions_->nextPosition();
}

private:
TermPositions* termPositions_ = nullptr;
};
2 changes: 1 addition & 1 deletion src/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,8 @@ SET(clucene_core_Files
./CLucene/search/spans/SpanWeight.cpp
./CLucene/search/spans/SpanWeight.h
./CLucene/search/spans/TermSpans.cpp
./CLucene/search/query/DcoIdSetIterator.h
./CLucene/search/query/TermIterator.h
./CLucene/search/query/TermPositionIterator.h
)

#if USE_SHARED_OBJECT_FILES then we link directly to the object files (means rebuilding them for the core)
Expand Down

0 comments on commit f5090d7

Please sign in to comment.