# include/xapian/termiterator.h

Go to the documentation of this file.

    00001
    00004 /* ----START-LICENCE----
    00005  * Copyright 1999,2000,2001 BrightStation PLC
    00006  * Copyright 2002 Ananova Ltd
    00007  * Copyright 2003,2004,2005 Olly Betts
    00008  *
    00009  * This program is free software; you can redistribute it and/or
    00010  * modify it under the terms of the GNU General Public License as
    00011  * published by the Free Software Foundation; either version 2 of the
    00012  * License, or (at your option) any later version.
    00013  *
    00014  * This program is distributed in the hope that it will be useful,
    00015  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    00016  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00017  * GNU General Public License for more details.
    00018  *
    00019  * You should have received a copy of the GNU General Public License
    00020  * along with this program; if not, write to the Free Software
    00021  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
    00022  * USA
    00023  * -----END-LICENCE-----
    00024  */
    00025
    00026 #ifndef XAPIAN_INCLUDED_TERMITERATOR_H
    00027 #define XAPIAN_INCLUDED_TERMITERATOR_H
    00028
    00029 #include <iterator>
    00030 #include <string>
    00031
    00032 #include <xapian/base.h>
    00033 #include <xapian/types.h>
    00034 #include <xapian/positioniterator.h>
    00035
    00036 namespace Xapian {
    00037
    00038 class Database;
    00039
    00043 class TermNameWrapper {
    00044     private:
    00045         std::string tname;
    00046     public:
    00047         TermNameWrapper(const std::string & tname_) : tname(tname_) { }
    00048         std::string operator*() const { return tname; }
    00049 };
    00050
    00053 class TermIterator {
    00054     public:
    00055         class Internal;
    00057         Xapian::Internal::RefCntPtr<Internal> internal;
    00058
    00060         explicit TermIterator(Internal *internal_);
    00061
    00063         TermIterator();
    00064
    00066         ~TermIterator();
    00067
    00071         TermIterator(const TermIterator &other);
    00072
    00076         void operator=(const TermIterator &other);
    00077
    00079         std::string operator *() const;
    00080
    00081         TermIterator & operator++();
    00082
    00083         TermNameWrapper operator++(int) {
    00084             std::string tmp = **this;
    00085             operator++();
    00086             return TermNameWrapper(tmp);
    00087         }
    00088
    00092         void skip_to(const std::string & tname);
    00093
    00096         Xapian::termcount get_wdf() const;
    00097
    00100         Xapian::doccount get_termfreq() const;
    00101
    00105         PositionIterator positionlist_begin() const;
    00106
    00110         PositionIterator positionlist_end() const {
    00111             return PositionIterator(NULL);
    00112         }
    00113
    00117         std::string get_description() const;
    00118
    00120
    00121         typedef std::input_iterator_tag iterator_category;
    00122         typedef std::string value_type;
    00123         typedef Xapian::termcount_diff difference_type;
    00124         typedef std::string * pointer;
    00125         typedef std::string & reference;
    00127 };
    00128
    00129 inline bool
    00130 operator==(const TermIterator &a, const TermIterator &b)
    00131 {
    00132     return (a.internal.get() == b.internal.get());
    00133 }
    00134
    00135 inline bool
    00136 operator!=(const TermIterator &a, const TermIterator &b)
    00137 {
    00138     return !(a == b);
    00139 }
    00140
    00141 }
    00142
    00143 #endif /* XAPIAN_INCLUDED_TERMITERATOR_H */