Branch data Line data Source code
1 : : /** @file net_postlist.cc
2 : : * @brief Postlists for remote databases
3 : : */
4 : : /* Copyright (C) 2007 Lemur Consulting Ltd
5 : : * Copyright (C) 2007,2008,2009 Olly Betts
6 : : *
7 : : * This program is free software; you can redistribute it and/or
8 : : * modify it under the terms of the GNU General Public License as
9 : : * published by the Free Software Foundation; either version 2 of the
10 : : * License, or (at your option) any later version.
11 : : *
12 : : * This program is distributed in the hope that it will be useful,
13 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 : : * GNU General Public License for more details.
16 : : *
17 : : * You should have received a copy of the GNU General Public License
18 : : * along with this program; if not, write to the Free Software
19 : : * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
20 : : * USA
21 : : */
22 : :
23 : : #include <config.h>
24 : :
25 : : #include "net_postlist.h"
26 : : #include "serialise.h"
27 : :
28 : : using namespace std;
29 : :
30 : : Xapian::doccount
31 : 0 : NetworkPostList::get_termfreq() const
32 : : {
33 : 0 : return termfreq;
34 : : }
35 : :
36 : : Xapian::docid
37 : 37464 : NetworkPostList::get_docid() const
38 : : {
39 : 37464 : return lastdocid;
40 : : }
41 : :
42 : : Xapian::termcount
43 : 510 : NetworkPostList::get_doclength() const
44 : : {
45 : 510 : return db->get_doclength(lastdocid);
46 : : }
47 : :
48 : : Xapian::termcount
49 : 1416 : NetworkPostList::get_wdf() const
50 : : {
51 : 1416 : return lastwdf;
52 : : }
53 : :
54 : : PositionList *
55 : 0 : NetworkPostList::read_position_list()
56 : : {
57 : 0 : lastposlist = db->open_position_list(lastdocid, term);
58 : 0 : return lastposlist.get();
59 : : }
60 : :
61 : : PositionList *
62 : 330 : NetworkPostList::open_position_list() const
63 : : {
64 : 330 : return db->open_position_list(lastdocid, term);
65 : : }
66 : :
67 : : PostList *
68 : 20070 : NetworkPostList::next(Xapian::weight)
69 : : {
70 [ + + ]: 20070 : if (!started) {
71 : 780 : started = true;
72 : 780 : pos = postings.data();
73 : 780 : pos_end = pos + postings.size();
74 : 780 : lastdocid = 0;
75 : : }
76 : :
77 [ + + ]: 20070 : if (pos == pos_end) {
78 : 708 : pos = NULL;
79 : : } else {
80 : 19362 : lastdocid += decode_length(&pos, pos_end, false) + 1;
81 : 19362 : lastwdf = decode_length(&pos, pos_end, false);
82 : : }
83 : :
84 : 20070 : return NULL;
85 : : }
86 : :
87 : : PostList *
88 : 42 : NetworkPostList::skip_to(Xapian::docid did, Xapian::weight min_weight)
89 : : {
90 [ - + ]: 42 : if (!started)
91 : 0 : next(min_weight);
92 [ + + ][ + + ]: 276 : while (pos && lastdocid < did)
[ + + ]
93 : 234 : next(min_weight);
94 : 42 : return NULL;
95 : : }
96 : :
97 : : bool
98 : 19878 : NetworkPostList::at_end() const
99 : : {
100 [ + + ][ + - ]: 19878 : return (pos == NULL && started);
101 : : }
102 : :
103 : : string
104 : 18 : NetworkPostList::get_description() const
105 : : {
106 : 18 : string desc = "NetworkPostList(";
107 : 18 : desc += term;
108 : 18 : desc += ')';
109 : 0 : return desc;
110 : : }
|