Branch data Line data Source code
1 : : /** @file chert_dbstats.h
2 : : * @brief Chert class for database statistics.
3 : : */
4 : : /* Copyright (C) 2009 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_CHERT_DBSTATS_H
22 : : #define XAPIAN_INCLUDED_CHERT_DBSTATS_H
23 : :
24 : : #include "chert_types.h"
25 : : #include "xapian/types.h"
26 : :
27 : : #include "internaltypes.h"
28 : :
29 : : class ChertPostListTable;
30 : :
31 : : /// Chert class for database statistics.
32 : : class ChertDatabaseStats {
33 : : /// Don't allow assignment.
34 : : void operator=(const ChertDatabaseStats &);
35 : :
36 : : /// Don't allow copying.
37 : : ChertDatabaseStats(const ChertDatabaseStats &);
38 : :
39 : : /// The total of the lengths of all documents in the database.
40 : : totlen_t total_doclen;
41 : :
42 : : /// Greatest document id ever used in this database.
43 : : Xapian::docid last_docid;
44 : :
45 : : /// A lower bound on the smallest document length in this database.
46 : : Xapian::termcount doclen_lbound;
47 : :
48 : : /// An upper bound on the greatest document length in this database.
49 : : Xapian::termcount doclen_ubound;
50 : :
51 : : /// An upper bound on the greatest wdf in this database.
52 : : Xapian::termcount wdf_ubound;
53 : :
54 : : public:
55 : 2289 : ChertDatabaseStats()
56 : : : total_doclen(0), last_docid(0), doclen_lbound(0), doclen_ubound(0),
57 : 2289 : wdf_ubound(0) { }
58 : :
59 : 74020 : totlen_t get_total_doclen() const { return total_doclen; }
60 : :
61 : 89836 : Xapian::docid get_last_docid() const { return last_docid; }
62 : :
63 : 356862 : Xapian::termcount get_doclength_lower_bound() const {
64 : 356862 : return doclen_lbound;
65 : : }
66 : :
67 : 1567 : Xapian::termcount get_doclength_upper_bound() const {
68 : 1567 : return doclen_ubound;
69 : : }
70 : :
71 : 235919 : Xapian::termcount get_wdf_upper_bound() const { return wdf_ubound; }
72 : :
73 : 334 : void zero() {
74 : 334 : total_doclen = 0;
75 : 334 : last_docid = 0;
76 : 334 : doclen_lbound = 0;
77 : 334 : doclen_ubound = 0;
78 : 334 : wdf_ubound = 0;
79 : 334 : }
80 : :
81 : : void read(ChertPostListTable & postlist_table);
82 : :
83 : 92 : void set_last_docid(Xapian::docid did) { last_docid = did; }
84 : :
85 : 77389 : void add_document(Xapian::termcount doclen) {
86 [ + + ][ + + ]: 77389 : if (total_doclen == 0 || (doclen && doclen < doclen_lbound))
[ + + ]
87 : 42532 : doclen_lbound = doclen;
88 [ + + ]: 77389 : if (doclen > doclen_ubound)
89 : 462 : doclen_ubound = doclen;
90 : 77389 : total_doclen += doclen;
91 : 77389 : }
92 : :
93 : 19094 : void delete_document(Xapian::termcount doclen) {
94 : 19094 : total_doclen -= doclen;
95 : : // If the database no longer contains any postings, we can reset
96 : : // doclen_lbound, doclen_ubound and wdf_ubound.
97 [ + + ]: 19094 : if (total_doclen == 0) {
98 : 9148 : doclen_lbound = 0;
99 : 9148 : doclen_ubound = 0;
100 : 9148 : wdf_ubound = 0;
101 : : }
102 : 19094 : }
103 : :
104 : 777237 : void check_wdf(Xapian::termcount wdf) {
105 [ + + ]: 777237 : if (wdf > wdf_ubound) wdf_ubound = wdf;
106 : 777237 : }
107 : :
108 : 68213 : Xapian::docid get_next_docid() { return ++last_docid; }
109 : :
110 : : void write(ChertPostListTable & postlist_table) const;
111 : : };
112 : :
113 : : #endif // XAPIAN_INCLUDED_CHERT_DBSTATS_H
|