xapian-core  2.0.0
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
AndPostList Class Reference

N-way AND postlist. More...

#include <andpostlist.h>

+ Inheritance diagram for AndPostList:
+ Collaboration diagram for AndPostList:

Classes

struct  ComparePostListTermFreqAscending
 Comparison functor which orders PostList* by ascending get_termfreq(). More...
 

Public Member Functions

template<class RandomItor >
 AndPostList (RandomItor pl_begin, RandomItor pl_end, PostListTree *matcher_)
 Construct from 2 random-access iterators to a container of PostList* and a pointer to the matcher. More...
 
 AndPostList (PostList *l, PostList *r, double lmax, double rmax, PostListTree *matcher_, Xapian::doccount termfreq_)
 Construct as the decay product of an OrPostList or AndMaybePostList. More...
 
 ~AndPostList ()
 
Xapian::docid get_docid () const
 Return the current docid. More...
 
double get_weight (Xapian::termcount doclen, Xapian::termcount unique_terms, Xapian::termcount wdfdocmax) const
 Return the weight contribution for the current position. More...
 
bool at_end () const
 Return true if the current position is past the last entry in this list. More...
 
double recalc_maxweight ()
 Recalculate the upper bound on what get_weight() can return. More...
 
PostListnext (double w_min)
 Advance the current position to the next document in the postlist. More...
 
PostListskip_to (Xapian::docid, double w_min)
 Skip forward to the specified docid. More...
 
void get_docid_range (Xapian::docid &first, Xapian::docid &last) const
 Get the bounds on the range of docids this PostList can return. More...
 
std::string get_description () const
 Return a string description of this object. More...
 
Xapian::termcount get_wdf () const
 Get the within-document frequency. More...
 
Xapian::termcount count_matching_subqs () const
 Count the number of leaf subqueries which match at the current position. More...
 
void gather_position_lists (OrPositionList *orposlist)
 Gather PositionList* objects for a subtree. More...
 
- Public Member Functions inherited from Xapian::Internal::PostList
virtual ~PostList ()
 We have virtual methods and want to be able to delete derived classes using a pointer to the base class, so we need a virtual destructor. More...
 
Xapian::doccount get_termfreq () const
 Get an estimate of the number of documents this PostList will return. More...
 
virtual PositionListread_position_list ()
 Read the position list for the term in the current document and return a pointer to it (owned by the PostList). More...
 
virtual PositionListopen_position_list () const
 Read the position list for the term in the current document and return a pointer to it (not owned by the PostList). More...
 
virtual PostListcheck (Xapian::docid did, double w_min, bool &valid)
 Check if the specified docid occurs in this postlist. More...
 
PostListnext ()
 Advance the current position to the next document in the postlist. More...
 
PostListskip_to (Xapian::docid did)
 Skip forward to the specified docid. More...
 

Private Member Functions

AndPostListoperator= (const AndPostList &)=delete
 Don't allow assignment. More...
 
 AndPostList (const AndPostList &)=delete
 Don't allow copying. More...
 
double new_min (double w_min, size_t n)
 Calculate the new minimum weight for sub-postlist n. More...
 
void next_helper (size_t n, double w_min)
 Call next on a sub-postlist n, and handle any pruning. More...
 
void skip_to_helper (size_t n, Xapian::docid did_min, double w_min)
 Call skip_to on a sub-postlist n, and handle any pruning. More...
 
void check_helper (size_t n, Xapian::docid did_min, double w_min, bool &valid)
 Call check on a sub-postlist n, and handle any pruning. More...
 
void allocate_plist_and_max_wt ()
 Allocate plist and max_wt arrays of n_kids each. More...
 
PostListfind_next_match (double w_min)
 Advance the sublists to the next match. More...
 

Private Attributes

Xapian::docid did = 0
 The current docid, or zero if we haven't started or are at_end. More...
 
size_t n_kids
 The number of sub-postlists. More...
 
PostList ** plist = nullptr
 Array of pointers to sub-postlists. More...
 
double * max_wt = nullptr
 Array of maximum weights for the sub-postlists. More...
 
double max_total = 0.0
 Total maximum weight (== sum of max_wt values). More...
 
PostListTreematcher
 Pointer to the matcher object, so we can report pruning. More...
 

Additional Inherited Members

- Protected Member Functions inherited from Xapian::Internal::PostList
 PostList ()
 Only constructable as a base class for derived classes. More...
 
- Protected Attributes inherited from Xapian::Internal::PostList
Xapian::doccount termfreq
 Estimate of the number of documents this PostList will return. More...
 

Detailed Description

N-way AND postlist.

Definition at line 32 of file andpostlist.h.

Constructor & Destructor Documentation

◆ AndPostList() [1/3]

AndPostList::AndPostList ( const AndPostList )
privatedelete

Don't allow copying.

◆ AndPostList() [2/3]

template<class RandomItor >
AndPostList::AndPostList ( RandomItor  pl_begin,
RandomItor  pl_end,
PostListTree matcher_ 
)
inline

Construct from 2 random-access iterators to a container of PostList* and a pointer to the matcher.

Definition at line 119 of file andpostlist.h.

References allocate_plist_and_max_wt(), Assert, Xapian::Internal::PostList::get_docid_range(), get_docid_range(), Xapian::Internal::PostList::get_termfreq(), n_kids, plist, rare, and Xapian::Internal::PostList::termfreq.

◆ AndPostList() [3/3]

AndPostList::AndPostList ( PostList l,
PostList r,
double  lmax,
double  rmax,
PostListTree matcher_,
Xapian::doccount  termfreq_ 
)
inline

◆ ~AndPostList()

AndPostList::~AndPostList ( )

Definition at line 44 of file andpostlist.cc.

Member Function Documentation

◆ allocate_plist_and_max_wt()

void AndPostList::allocate_plist_and_max_wt ( )
private

Allocate plist and max_wt arrays of n_kids each.

Exceptions
std::bad_alloc.

Definition at line 32 of file andpostlist.cc.

Referenced by AndPostList().

◆ at_end()

bool AndPostList::at_end ( ) const
virtual

Return true if the current position is past the last entry in this list.

Implements Xapian::Internal::PostList.

Definition at line 75 of file andpostlist.cc.

◆ check_helper()

void AndPostList::check_helper ( size_t  n,
Xapian::docid  did_min,
double  w_min,
bool &  valid 
)
inlineprivate

Call check on a sub-postlist n, and handle any pruning.

Definition at line 94 of file andpostlist.h.

References Xapian::Internal::PostList::check(), PostListTree::force_recalc(), matcher, max_wt, new_min(), and plist.

◆ count_matching_subqs()

Xapian::termcount AndPostList::count_matching_subqs ( ) const
virtual

Count the number of leaf subqueries which match at the current position.

Reimplemented from Xapian::Internal::PostList.

Definition at line 172 of file andpostlist.cc.

◆ find_next_match()

PostList * AndPostList::find_next_match ( double  w_min)
private

Advance the sublists to the next match.

Definition at line 93 of file andpostlist.cc.

References Xapian::Internal::PostList::get_docid().

◆ gather_position_lists()

void AndPostList::gather_position_lists ( OrPositionList orposlist)
virtual

Gather PositionList* objects for a subtree.

Reimplemented from Xapian::Internal::PostList.

Definition at line 182 of file andpostlist.cc.

◆ get_description()

std::string AndPostList::get_description ( ) const
virtual

Return a string description of this object.

Implements Xapian::Internal::PostList.

Definition at line 149 of file andpostlist.cc.

◆ get_docid()

Xapian::docid AndPostList::get_docid ( ) const
virtual

Return the current docid.

Implements Xapian::Internal::PostList.

Definition at line 56 of file andpostlist.cc.

◆ get_docid_range()

void AndPostList::get_docid_range ( Xapian::docid first,
Xapian::docid last 
) const
virtual

Get the bounds on the range of docids this PostList can return.

Parameters
[out]firstSet to a lower bound on the docids that can be returned, or not changed if there's no known lower bound (other than 1).
[out]lastSet to an upper bound on the docids that can be returned, or not changed if there's no known upper bound (other than the highest used docid).

The default implementation (PostList::get_docid_range()) does nothing, which is suitable when there's no known lower or upper bound.

Reimplemented from Xapian::Internal::PostList.

Definition at line 136 of file andpostlist.cc.

Referenced by AndPostList().

◆ get_wdf()

Xapian::termcount AndPostList::get_wdf ( ) const
virtual

Get the within-document frequency.

For AndPostlist returns the sum of the wdfs of the sub postlists.

The wdf isn't really meaningful in many situations, but if the lists are being combined as a synonym we want the sum of the wdfs, so we do that in general.

Reimplemented from Xapian::Internal::PostList.

Definition at line 162 of file andpostlist.cc.

◆ get_weight()

double AndPostList::get_weight ( Xapian::termcount  doclen,
Xapian::termcount  unique_terms,
Xapian::termcount  wdfdocmax 
) const
virtual

Return the weight contribution for the current position.

Implements Xapian::Internal::PostList.

Definition at line 62 of file andpostlist.cc.

References Assert.

◆ new_min()

double AndPostList::new_min ( double  w_min,
size_t  n 
)
inlineprivate

Calculate the new minimum weight for sub-postlist n.

Definition at line 67 of file andpostlist.h.

References max_total, and max_wt.

Referenced by check_helper(), next_helper(), and skip_to_helper().

◆ next()

PostList * AndPostList::next ( double  w_min)
virtual

Advance the current position to the next document in the postlist.

The list starts before the first entry in the list, so next(), skip_to() or check() must be called before any methods which need the context of the current position.

Parameters
w_minThe minimum weight contribution that is needed (this is just a hint which PostList subclasses may ignore).
Returns
If a non-NULL pointer is returned, then the caller should substitute the returned pointer for its pointer to us, and then delete us. This "pruning" can only happen for a non-leaf subclass of this class.

Implements Xapian::Internal::PostList.

Definition at line 122 of file andpostlist.cc.

◆ next_helper()

void AndPostList::next_helper ( size_t  n,
double  w_min 
)
inlineprivate

Call next on a sub-postlist n, and handle any pruning.

Definition at line 72 of file andpostlist.h.

References PostListTree::force_recalc(), matcher, max_wt, new_min(), Xapian::Internal::PostList::next(), and plist.

◆ operator=()

AndPostList& AndPostList::operator= ( const AndPostList )
privatedelete

Don't allow assignment.

◆ recalc_maxweight()

double AndPostList::recalc_maxweight ( )
virtual

Recalculate the upper bound on what get_weight() can return.

The maximum weight that get_weight() can return can decrease as the match progresses (typically when the PostList tree prunes) - calling this method calculates a current upper bound.

Note that this method may be called after the postlist has reached the end. In this situation, the method should return 0.

Implements Xapian::Internal::PostList.

Definition at line 81 of file andpostlist.cc.

◆ skip_to()

PostList * AndPostList::skip_to ( Xapian::docid  did,
double  w_min 
)
virtual

Skip forward to the specified docid.

If the specified docid isn't in the list, position ourselves on the first document after it (or at_end() if no greater docids are present).

Parameters
w_minThe minimum weight contribution that is needed (this is just a hint which PostList subclasses may ignore).
Returns
If a non-NULL pointer is returned, then the caller should substitute the returned pointer for its pointer to us, and then delete us. This "pruning" can only happen for a non-leaf subclass of this class.

Implements Xapian::Internal::PostList.

Definition at line 129 of file andpostlist.cc.

◆ skip_to_helper()

void AndPostList::skip_to_helper ( size_t  n,
Xapian::docid  did_min,
double  w_min 
)
inlineprivate

Call skip_to on a sub-postlist n, and handle any pruning.

Definition at line 83 of file andpostlist.h.

References PostListTree::force_recalc(), matcher, max_wt, new_min(), plist, and Xapian::Internal::PostList::skip_to().

Member Data Documentation

◆ did

Xapian::docid AndPostList::did = 0
private

The current docid, or zero if we haven't started or are at_end.

Definition at line 49 of file andpostlist.h.

◆ matcher

PostListTree* AndPostList::matcher
private

Pointer to the matcher object, so we can report pruning.

Definition at line 64 of file andpostlist.h.

Referenced by check_helper(), next_helper(), and skip_to_helper().

◆ max_total

double AndPostList::max_total = 0.0
private

Total maximum weight (== sum of max_wt values).

Definition at line 61 of file andpostlist.h.

Referenced by new_min().

◆ max_wt

double* AndPostList::max_wt = nullptr
private

Array of maximum weights for the sub-postlists.

Definition at line 58 of file andpostlist.h.

Referenced by AndPostList(), check_helper(), new_min(), next_helper(), and skip_to_helper().

◆ n_kids

size_t AndPostList::n_kids
private

The number of sub-postlists.

Definition at line 52 of file andpostlist.h.

Referenced by AndPostList().

◆ plist

PostList** AndPostList::plist = nullptr
private

Array of pointers to sub-postlists.

Definition at line 55 of file andpostlist.h.

Referenced by AndPostList(), check_helper(), next_helper(), and skip_to_helper().


The documentation for this class was generated from the following files: