1 : /** @file expanddecider.h
2 : * @brief Allow rejection of terms during ESet generation.
3 : */
4 : /* Copyright (C) 2007 Olly Betts
5 : *
6 : * This program is free software; you can redistribute it and/or
7 : * modify it under the terms of the GNU General Public License as
8 : * published by the Free Software Foundation; either version 2 of the
9 : * License, or (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_EXPANDDECIDER_H
22 : #define XAPIAN_INCLUDED_EXPANDDECIDER_H
23 :
24 : #include <set>
25 : #include <string>
26 :
27 : #include <xapian/visibility.h>
28 :
29 : namespace Xapian {
30 :
31 : /** Virtual base class for expand decider functor. */
32 5 : class XAPIAN_VISIBILITY_DEFAULT ExpandDecider {
33 : public:
34 : /** Do we want this term in the ESet? */
35 : virtual bool operator()(const std::string &term) const = 0;
36 :
37 : /** Virtual destructor, because we have virtual methods. */
38 : virtual ~ExpandDecider();
39 : };
40 :
41 : /** ExpandDecider subclass which rejects terms using two ExpandDeciders.
42 : *
43 : * Terms are only accepted if they are accepted by both of the specified
44 : * ExpandDecider objects.
45 : */
46 : class XAPIAN_VISIBILITY_DEFAULT ExpandDeciderAnd : public ExpandDecider {
47 : const ExpandDecider &first, &second;
48 :
49 : public:
50 : /** Terms will be checked with @a first, and if accepted, then checked
51 : * with @a second.
52 : */
53 : ExpandDeciderAnd(const ExpandDecider &first_,
54 : const ExpandDecider &second_)
55 : : first(first_), second(second_) { }
56 :
57 : /** Compatibility method. */
58 : ExpandDeciderAnd(const ExpandDecider *first_,
59 : const ExpandDecider *second_)
60 : : first(*first_), second(*second_) { }
61 :
62 : virtual bool operator()(const std::string &term) const;
63 : };
64 :
65 : /** ExpandDecider subclass which rejects terms in a specified list.
66 : *
67 : * ExpandDeciderFilterTerms provides an easy way to filter out terms from
68 : * a fixed list when generating an ESet.
69 : */
70 : class XAPIAN_VISIBILITY_DEFAULT ExpandDeciderFilterTerms : public ExpandDecider {
71 : std::set<std::string> rejects;
72 :
73 : public:
74 : /** The two iterators specify a list of terms to be rejected.
75 : *
76 : * @a reject_begin and @a reject_end can be any input_iterator type
77 : * which returns std::string or char * (e.g. TermIterator or char **).
78 : */
79 : template <class Iterator>
80 : ExpandDeciderFilterTerms(Iterator reject_begin, Iterator reject_end)
81 : : rejects(reject_begin, reject_end) { }
82 :
83 : virtual bool operator()(const std::string &term) const;
84 : };
85 :
86 : }
87 :
88 : #endif // XAPIAN_INCLUDED_EXPANDDECIDER_H
|