FlintPostList Class Reference

A postlist in a flint database. More...

#include <flint_postlist.h>

Inheritance diagram for FlintPostList:

Inheritance graph
[legend]
Collaboration diagram for FlintPostList:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 FlintPostList (Xapian::Internal::RefCntPtr< const FlintDatabase > this_db_, const string &term_)
 Default constructor.
 ~FlintPostList ()
 Destructor.
Xapian::doccount get_termfreq () const
 Returns number of docs indexed by this term.
Xapian::docid get_docid () const
 Returns the current docid.
Xapian::termcount get_doclength () const
 Returns the length of current document.
Xapian::termcount get_wdf () const
 Returns the Within Document Frequency of the term in the current document.
PositionListread_position_list ()
 Get the list of positions of the term in the current document.
PositionListopen_position_list () const
 Get the list of positions of the term in the current document.
PostListnext (Xapian::weight w_min)
 Move to the next document.
PostListskip_to (Xapian::docid desired_did, Xapian::weight w_min)
 Skip to next document with docid >= docid.
bool at_end () const
 Return true if and only if we're off the end of the list.
std::string get_description () const
 Get a description of the document.

Static Public Member Functions

static void read_number_of_entries (const char **posptr, const char *end, Xapian::doccount *number_of_entries_ptr, Xapian::termcount *collection_freq_ptr)
 Read the number of entries and the collection frequency.

Protected Attributes

Xapian::Internal::RefCntPtr
< const FlintDatabase
this_db
 The database we are searching.
bool have_started
 Whether we've started reading the list yet.
FlintPositionList positionlist
 The position list object for this posting list.

Private Member Functions

 FlintPostList (const FlintPostList &)
 Copying is not allowed.
void operator= (const FlintPostList &)
 Assignment is not allowed.
bool next_in_chunk ()
 Move to the next item in the chunk, if possible.
void next_chunk ()
 Move to the next chunk.
bool current_chunk_contains (Xapian::docid desired_did)
 Return true if the given document ID lies in the range covered by the current chunk.
void move_to_chunk_containing (Xapian::docid desired_did)
 Move to chunk containing the specified document ID.
bool move_forward_in_chunk_to_at_least (Xapian::docid desired_did)
 Scan forward in the current chunk for the specified document ID.

Private Attributes

AutoPtr< FlintCursorcursor
 Cursor pointing to current chunk of postlist.
bool is_last_chunk
 True if this is the last chunk.
Xapian::docid first_did_in_chunk
 The first document id in this chunk.
Xapian::docid last_did_in_chunk
 The last document id in this chunk.
const char * pos
 Position of iteration through current chunk.
const char * end
 Pointer to byte after end of current chunk.
Xapian::docid did
 Document id we're currently at.
flint_doclen_t doclength
 The (absolute) length of the current document.
Xapian::termcount wdf
 The wdf of the current document.
bool is_at_end
 Whether we've run off the end of the list yet.
Xapian::doccount number_of_entries
 The number of entries in the posting list.


Detailed Description

A postlist in a flint database.

Definition at line 104 of file flint_postlist.h.


Constructor & Destructor Documentation

FlintPostList::FlintPostList ( const FlintPostList  )  [private]

Copying is not allowed.

FlintPostList::FlintPostList ( Xapian::Internal::RefCntPtr< const FlintDatabase this_db_,
const string &  term_ 
)

Default constructor.

The format of a postlist is:.

Split into chunks. Key for first chunk is the termname (encoded as length : name). Key for subsequent chunks is the same, followed by the document ID of the first document in the chunk (encoded as length of representation in first byte, and then docid).

A chunk (except for the first chunk) contains:

1) bool - true if this is the last chunk. 2) difference between final docid in chunk and first docid. 3) wdf, then doclength of first item. 4) increment in docid to next item, followed by wdf and doclength of item 5) (4) repeatedly.

The first chunk begins with the number of entries, the collection frequency, then the docid of the first document, then has the header of a standard chunk.

Definition at line 647 of file flint_postlist.cc.

References cursor, did, doclength, end, first_did_in_chunk, Xapian::Internal::RefCntPtr< T >::get(), is_at_end, is_last_chunk, last_did_in_chunk, LOGCALL_VOID, make_key(), number_of_entries, pos, read_start_of_chunk(), read_start_of_first_chunk(), read_wdf_and_length(), LeafPostList::term, and wdf.

FlintPostList::~FlintPostList (  ) 

Destructor.

Definition at line 678 of file flint_postlist.cc.

References LOGCALL_VOID.


Member Function Documentation

bool FlintPostList::at_end (  )  const [inline, virtual]

bool FlintPostList::current_chunk_contains ( Xapian::docid  desired_did  )  [private]

Return true if the given document ID lies in the range covered by the current chunk.

This does not say whether the document ID is actually present. It will return false if the document ID is greater than the last document ID in the chunk, even if it is less than the first document ID in the next chunk: it is possible for no chunk to contain a particular document ID.

Definition at line 792 of file flint_postlist.cc.

References first_did_in_chunk, last_did_in_chunk, LOGCALL, and RETURN.

Referenced by skip_to().

string FlintPostList::get_description (  )  const [virtual]

Get a description of the document.

Implements Xapian::PostingIterator::Internal.

Reimplemented in FlintModifiedPostList.

Definition at line 903 of file flint_postlist.cc.

References number_of_entries, Xapian::Internal::str(), and LeafPostList::term.

Xapian::docid FlintPostList::get_docid (  )  const [inline, virtual]

Returns the current docid.

Implements Xapian::PostingIterator::Internal.

Reimplemented in FlintModifiedPostList.

Definition at line 218 of file flint_postlist.h.

References Assert, did, and have_started.

Referenced by FlintModifiedPostList::get_docid(), and FlintModifiedPostList::skip_deletes().

Xapian::termcount FlintPostList::get_doclength (  )  const [virtual]

Returns the length of current document.

Implements Xapian::PostingIterator::Internal.

Reimplemented in FlintModifiedPostList.

Definition at line 747 of file flint_postlist.cc.

References Assert, doclength, have_started, LOGCALL, and RETURN.

Referenced by FlintModifiedPostList::get_doclength().

Xapian::doccount FlintPostList::get_termfreq (  )  const [inline, virtual]

Returns number of docs indexed by this term.

This is the length of the postlist.

Implements LeafPostList.

Reimplemented in FlintModifiedPostList.

Definition at line 215 of file flint_postlist.h.

References number_of_entries.

Xapian::termcount FlintPostList::get_wdf (  )  const [inline, virtual]

Returns the Within Document Frequency of the term in the current document.

Reimplemented from Xapian::PostingIterator::Internal.

Reimplemented in FlintModifiedPostList.

Definition at line 226 of file flint_postlist.h.

References Assert, have_started, and wdf.

bool FlintPostList::move_forward_in_chunk_to_at_least ( Xapian::docid  desired_did  )  [private]

Scan forward in the current chunk for the specified document ID.

This is particularly efficient if the desired document ID is greater than the last in the chunk - it then skips straight to the end.

Returns:
true if we moved to a valid document, false if we reached the end of the chunk.

Definition at line 851 of file flint_postlist.cc.

References did, end, last_did_in_chunk, LOGCALL, next_in_chunk(), pos, and RETURN.

Referenced by skip_to().

void FlintPostList::move_to_chunk_containing ( Xapian::docid  desired_did  )  [private]

Move to chunk containing the specified document ID.

This moves to the chunk whose starting document ID is <= desired_did, but such that the next chunk's starting document ID is > desired_did.

It is thus possible that current_chunk_contains(desired_did) will return false after this call, since the document ID might lie after the end of this chunk, but before the start of the next chunk.

Definition at line 803 of file flint_postlist.cc.

References Assert, check_tname_in_key_lite(), cursor, did, doclength, end, F_unpack_uint_preserving_sort(), first_did_in_chunk, is_at_end, is_last_chunk, last_did_in_chunk, LOGCALL_VOID, FlintPostListTable::make_key(), next_chunk(), number_of_entries, pos, read_start_of_chunk(), read_start_of_first_chunk(), read_wdf_and_length(), report_read_error(), LeafPostList::term, and wdf.

Referenced by skip_to().

PostList * FlintPostList::next ( Xapian::weight  w_min  )  [virtual]

Move to the next document.

Implements Xapian::PostingIterator::Internal.

Reimplemented in FlintModifiedPostList.

Definition at line 770 of file flint_postlist.cc.

References did, doclength, have_started, is_at_end, LOGCALL, LOGLINE, next_chunk(), next_in_chunk(), RETURN, and wdf.

void FlintPostList::next_chunk (  )  [private]

Move to the next chunk.

If there are no more chunks in this postlist, this will set is_at_end to true.

Definition at line 701 of file flint_postlist.cc.

References check_tname_in_key_lite(), cursor, did, doclength, end, F_unpack_uint_preserving_sort(), first_did_in_chunk, is_at_end, is_last_chunk, last_did_in_chunk, LOGCALL_VOID, pos, read_start_of_chunk(), read_wdf_and_length(), report_read_error(), Xapian::Internal::str(), LeafPostList::term, and wdf.

Referenced by move_to_chunk_containing(), and next().

bool FlintPostList::next_in_chunk (  )  [private]

Move to the next item in the chunk, if possible.

If already at the end of the chunk, returns false.

Definition at line 684 of file flint_postlist.cc.

References Assert, did, doclength, end, last_did_in_chunk, LOGCALL, pos, read_did_increase(), read_wdf_and_length(), RETURN, and wdf.

Referenced by move_forward_in_chunk_to_at_least(), and next().

PositionList * FlintPostList::open_position_list (  )  const [virtual]

Get the list of positions of the term in the current document.

Reimplemented from Xapian::PostingIterator::Internal.

Reimplemented in FlintModifiedPostList.

Definition at line 763 of file flint_postlist.cc.

References did, LOGCALL, RETURN, LeafPostList::term, and this_db.

void FlintPostList::operator= ( const FlintPostList  )  [private]

Assignment is not allowed.

void FlintPostList::read_number_of_entries ( const char **  posptr,
const char *  end,
Xapian::doccount number_of_entries_ptr,
Xapian::termcount collection_freq_ptr 
) [static]

Read the number of entries and the collection frequency.

Read the number of entries in the posting list.

This must only be called when *posptr is pointing to the start of the first chunk of the posting list.

Definition at line 617 of file flint_postlist.cc.

References F_unpack_uint(), and report_read_error().

Referenced by FlintPostListTable::get_collection_freq(), FlintPostListTable::get_termfreq(), read_start_of_first_chunk(), and FlintAllTermsList::read_termfreq_and_collfreq().

PositionList * FlintPostList::read_position_list (  )  [virtual]

Get the list of positions of the term in the current document.

Reimplemented from Xapian::PostingIterator::Internal.

Reimplemented in FlintModifiedPostList.

Definition at line 755 of file flint_postlist.cc.

References did, LOGCALL, positionlist, FlintPositionList::read_data(), RETURN, LeafPostList::term, and this_db.

PostList * FlintPostList::skip_to ( Xapian::docid  desired_did,
Xapian::weight  w_min 
) [virtual]


Member Data Documentation

AutoPtr<FlintCursor> FlintPostList::cursor [private]

Cursor pointing to current chunk of postlist.

Definition at line 120 of file flint_postlist.h.

Referenced by FlintPostList(), move_to_chunk_containing(), and next_chunk().

The (absolute) length of the current document.

Definition at line 141 of file flint_postlist.h.

Referenced by FlintPostList(), get_doclength(), move_to_chunk_containing(), next(), next_chunk(), next_in_chunk(), and skip_to().

const char* FlintPostList::end [private]

Pointer to byte after end of current chunk.

Definition at line 135 of file flint_postlist.h.

Referenced by FlintPostList(), move_forward_in_chunk_to_at_least(), move_to_chunk_containing(), next_chunk(), and next_in_chunk().

The first document id in this chunk.

Definition at line 126 of file flint_postlist.h.

Referenced by current_chunk_contains(), FlintPostList(), move_to_chunk_containing(), and next_chunk().

bool FlintPostList::have_started [protected]

Whether we've started reading the list yet.

Definition at line 113 of file flint_postlist.h.

Referenced by get_docid(), get_doclength(), get_wdf(), next(), FlintModifiedPostList::next(), and skip_to().

bool FlintPostList::is_at_end [private]

Whether we've run off the end of the list yet.

Definition at line 147 of file flint_postlist.h.

Referenced by at_end(), FlintPostList(), move_to_chunk_containing(), next(), next_chunk(), and skip_to().

True if this is the last chunk.

Definition at line 123 of file flint_postlist.h.

Referenced by FlintPostList(), move_to_chunk_containing(), and next_chunk().

The number of entries in the posting list.

Definition at line 150 of file flint_postlist.h.

Referenced by FlintPostList(), get_description(), get_termfreq(), and move_to_chunk_containing().

const char* FlintPostList::pos [private]

Position of iteration through current chunk.

Definition at line 132 of file flint_postlist.h.

Referenced by FlintPostList(), move_forward_in_chunk_to_at_least(), move_to_chunk_containing(), next_chunk(), and next_in_chunk().

The position list object for this posting list.

Definition at line 116 of file flint_postlist.h.

Referenced by read_position_list().

The database we are searching.

This pointer is held so that the database doesn't get deleted before us, and also to give us access to the position_table.

Definition at line 110 of file flint_postlist.h.

Referenced by FlintModifiedPostList::get_doclength(), FlintModifiedPostList::get_termfreq(), open_position_list(), FlintModifiedPostList::open_position_list(), read_position_list(), and FlintModifiedPostList::read_position_list().

The wdf of the current document.

Definition at line 144 of file flint_postlist.h.

Referenced by FlintPostList(), get_wdf(), move_to_chunk_containing(), next(), next_chunk(), next_in_chunk(), and skip_to().


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

Documentation for Xapian (version 1.2.13).
Generated on 9 Jan 2013 by Doxygen 1.5.9.