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