1 /** @file
2  * @brief Abstract base class for iterating all terms in a database.
3  */
4 /* Copyright (C) 2007,2008,2011 Olly Betts
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
19  */
20 
21 #ifndef XAPIAN_INCLUDED_ALLTERMSLIST_H
22 #define XAPIAN_INCLUDED_ALLTERMSLIST_H
23 
24 #include "api/termlist.h"
25 
26 /// Abstract base class for iterating all terms in a database.
27 class AllTermsList : public TermList {
28     /// Don't allow assignment.
29     void operator=(const AllTermsList &);
30 
31     /// Don't allow copying.
32     AllTermsList(const AllTermsList &);
33 
34   protected:
35     /// Only constructable as a base class for derived classes.
AllTermsList()36     AllTermsList() { }
37 
38   public:
39     /// Return approximate size of this termlist.
40     virtual Xapian::termcount get_approx_size() const;
41 
42     /// Return the termname at the current position.
43     virtual std::string get_termname() const = 0;
44 
45     /** Return the wdf for the term at the current position.
46      *
47      *  This isn't meaningful for an AllTermsList, and will throw
48      *  Xapian::InvalidOperationError if called.
49      */
50     virtual Xapian::termcount get_wdf() const;
51 
52     /// Return the term frequency for the term at the current position.
53     virtual Xapian::doccount get_termfreq() const = 0;
54 
55     /// Advance the current position to the next term in the termlist.
56     virtual TermList *next() = 0;
57 
58     /** Skip forward to the specified term.
59      *
60      *  If the specified term isn't in the list, position ourselves on the
61      *  first term after @a term (or at_end() if no terms after @a term exist).
62      */
63     virtual TermList *skip_to(const std::string &term) = 0;
64 
65     /// Return true if the current position is past the last term in this list.
66     virtual bool at_end() const = 0;
67 
68     /** Return true if the current position is past the last term in this list.
69      *
70      *  This isn't meaningful for an AllTermsList, and will throw
71      *  Xapian::InvalidOperationError if called.
72      */
73     virtual Xapian::termcount positionlist_count() const;
74 
75     /** Return a PositionIterator for the current position.
76      *
77      *  This isn't meaningful for an AllTermsList, and will throw
78      *  Xapian::InvalidOperationError if called.
79      */
80     virtual Xapian::PositionIterator positionlist_begin() const;
81 };
82 
83 #endif // XAPIAN_INCLUDED_ALLTERMSLIST_H
84