Branch data Line data Source code
1 : : /* net_termlist.cc
2 : : *
3 : : * Copyright 1999,2000,2001 BrightStation PLC
4 : : * Copyright 2002,2003,2006,2007,2008,2009,2010 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
19 : : * USA
20 : : */
21 : :
22 : : #include <config.h>
23 : :
24 : : #include "net_termlist.h"
25 : :
26 : : #include "omassert.h"
27 : :
28 : : #include <xapian/error.h>
29 : :
30 : 2652 : NetworkTermList::NetworkTermList(Xapian::termcount document_length_,
31 : : Xapian::doccount database_size_,
32 : : Xapian::Internal::RefCntPtr<const RemoteDatabase> this_db_,
33 : : Xapian::docid did_)
34 : : : items(),
35 : : current_position(items.begin()),
36 : : started(false),
37 : : document_length(document_length_),
38 : : database_size(database_size_),
39 : : this_db(this_db_),
40 : 2652 : did(did_)
41 : : {
42 : 2652 : }
43 : :
44 : : Xapian::termcount
45 : 156 : NetworkTermList::get_approx_size() const
46 : : {
47 : 156 : return items.size();
48 : : }
49 : :
50 : : void
51 : 4764 : NetworkTermList::accumulate_stats(Xapian::Internal::ExpandStats & stats) const
52 : : {
53 : : Assert(started);
54 : : Assert(!at_end());
55 : :
56 : : stats.accumulate(current_position->wdf,
57 : : document_length,
58 : : current_position->termfreq,
59 : 4764 : database_size);
60 : 4764 : }
61 : :
62 : : string
63 : 16554 : NetworkTermList::get_termname() const
64 : : {
65 : : Assert(started);
66 : : Assert(!at_end());
67 : 16554 : return current_position->tname;
68 : : }
69 : :
70 : : Xapian::termcount
71 : 2304 : NetworkTermList::get_wdf() const
72 : : {
73 : : Assert(started);
74 : : Assert(!at_end());
75 : 2304 : return current_position->wdf;
76 : : }
77 : :
78 : : Xapian::doccount
79 : 1122 : NetworkTermList::get_termfreq() const
80 : : {
81 : : Assert(started);
82 : : Assert(!at_end());
83 : 1122 : return current_position->termfreq;
84 : : }
85 : :
86 : : TermList *
87 : 12396 : NetworkTermList::next()
88 : : {
89 [ + + ]: 12396 : if (started) {
90 : : Assert(!at_end());
91 : 9750 : current_position++;
92 : : } else {
93 : 2646 : started = true;
94 : : }
95 : 12396 : return NULL;
96 : : }
97 : :
98 : : TermList *
99 : 84 : NetworkTermList::skip_to(const string & term)
100 : : {
101 [ + + ][ + + ]: 204 : while (current_position != items.end() && current_position->tname < term) {
[ + + ]
102 : 120 : ++current_position;
103 : : }
104 : 84 : started = true;
105 : 84 : return NULL;
106 : : }
107 : :
108 : : bool
109 : 12588 : NetworkTermList::at_end() const
110 : : {
111 : : Assert(started);
112 : 12588 : return (current_position == items.end());
113 : : }
114 : :
115 : : Xapian::termcount
116 : 336 : NetworkTermList::positionlist_count() const
117 : : {
118 : 336 : throw Xapian::UnimplementedError("NetworkTermList::positionlist_count() not implemented");
119 : : }
120 : :
121 : : Xapian::PositionIterator
122 : 1686 : NetworkTermList::positionlist_begin() const
123 : : {
124 : 1686 : return Xapian::PositionIterator(this_db->open_position_list(did, get_termname()));
125 : : }
|