00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef OM_HGUARD_RSET_H
00024 #define OM_HGUARD_RSET_H
00025
00026 #include <set>
00027 #include <map>
00028 #include "omassert.h"
00029 #include "omdebug.h"
00030 #include "xapian/enquire.h"
00031 #include "omenquireinternal.h"
00032
00033
00034 class Stats;
00035
00041 class RSetI {
00042 private:
00043
00044 RSetI(const RSetI &);
00045 void operator=(const RSetI &);
00046
00047
00048 const Xapian::Database root;
00049 const Xapian::Database::Internal *dbroot;
00050
00051 std::map<string, Xapian::doccount> reltermfreqs;
00052 bool calculated_reltermfreqs;
00053
00058 void calculate_stats();
00059 public:
00060 std::set<Xapian::docid> documents;
00061
00062 RSetI(const Xapian::Database &root_, const Xapian::RSet & rset);
00063 RSetI(const Xapian::Database::Internal *dbroot_, const Xapian::RSet & rset);
00064
00069 void will_want_reltermfreq(string tname);
00070
00077 void contribute_stats(Stats & stats);
00078
00080 Xapian::doccount get_rsize() const;
00081 };
00082
00084
00086
00088 inline
00089 RSetI::RSetI(const Xapian::Database &root_, const Xapian::RSet & rset)
00090 : root(root_), dbroot(NULL), calculated_reltermfreqs(false),
00091 documents(rset.internal->get_items())
00092 {
00093 }
00094
00096 inline
00097 RSetI::RSetI(const Xapian::Database::Internal *dbroot_, const Xapian::RSet & rset)
00098 : dbroot(dbroot_), calculated_reltermfreqs(false),
00099 documents(rset.internal->get_items())
00100 {
00101 }
00102
00103 inline void
00104 RSetI::will_want_reltermfreq(string tname)
00105 {
00106 reltermfreqs[tname] = 0;
00107 }
00108
00109 inline Xapian::doccount
00110 RSetI::get_rsize() const
00111 {
00112 return documents.size();
00113 }
00114
00115 #endif