mirror of https://github.com/djcb/mu.git
* mu-msg-iter.{cc,h}: hook up the msg-iter with threading
This commit is contained in:
parent
d28319bc27
commit
0e4b4f7a55
|
@ -51,14 +51,14 @@ private:
|
||||||
|
|
||||||
|
|
||||||
struct _MuMsgIter {
|
struct _MuMsgIter {
|
||||||
_MuMsgIter (Xapian::Enquire &enq, size_t maxnum):
|
_MuMsgIter (Xapian::Enquire &enq, size_t maxnum, gboolean threads):
|
||||||
_enq(enq), _msg(0), _threadhash (0) {
|
_enq(enq), _msg(0), _threadhash (0) {
|
||||||
|
|
||||||
_matches = _enq.get_mset (0, maxnum);
|
_matches = _enq.get_mset (0, maxnum);
|
||||||
|
|
||||||
if (!_matches.empty()) {
|
if (threads && !_matches.empty()) {
|
||||||
_matches.fetch();
|
_matches.fetch();
|
||||||
_threadhash = mu_msg_threader_calculate (this);
|
_threadhash = mu_msg_threader_calculate (this, _matches.size());
|
||||||
ThreadKeyMaker keymaker(_threadhash);
|
ThreadKeyMaker keymaker(_threadhash);
|
||||||
enq.set_sort_by_key (&keymaker, false);
|
enq.set_sort_by_key (&keymaker, false);
|
||||||
_matches = _enq.get_mset (0, maxnum);
|
_matches = _enq.get_mset (0, maxnum);
|
||||||
|
@ -76,7 +76,8 @@ struct _MuMsgIter {
|
||||||
if (_msg)
|
if (_msg)
|
||||||
mu_msg_unref (_msg);
|
mu_msg_unref (_msg);
|
||||||
|
|
||||||
g_hash_table_destroy (_threadhash);
|
if (_threadhash)
|
||||||
|
g_hash_table_destroy (_threadhash);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Xapian::Enquire _enq;
|
const Xapian::Enquire _enq;
|
||||||
|
@ -90,12 +91,12 @@ struct _MuMsgIter {
|
||||||
|
|
||||||
|
|
||||||
MuMsgIter*
|
MuMsgIter*
|
||||||
mu_msg_iter_new (XapianEnquire *enq, size_t maxnum)
|
mu_msg_iter_new (XapianEnquire *enq, size_t maxnum, gboolean threads)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (enq, NULL);
|
g_return_val_if_fail (enq, NULL);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return new MuMsgIter ((Xapian::Enquire&)*enq, maxnum);
|
return new MuMsgIter ((Xapian::Enquire&)*enq, maxnum, threads);
|
||||||
|
|
||||||
} MU_XAPIAN_CATCH_BLOCK_RETURN(NULL);
|
} MU_XAPIAN_CATCH_BLOCK_RETURN(NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,11 +44,12 @@ typedef struct _MuMsgIter MuMsgIter;
|
||||||
* @param enq a Xapian::Enquire* cast to XapianEnquire* (because this
|
* @param enq a Xapian::Enquire* cast to XapianEnquire* (because this
|
||||||
* is C, not C++),providing access to search results
|
* is C, not C++),providing access to search results
|
||||||
* @param batchsize how many results to retrieve at once
|
* @param batchsize how many results to retrieve at once
|
||||||
|
* @param threads whether to calculate threads
|
||||||
*
|
*
|
||||||
* @return a new MuMsgIter, or NULL in case of error
|
* @return a new MuMsgIter, or NULL in case of error
|
||||||
*/
|
*/
|
||||||
MuMsgIter *mu_msg_iter_new (XapianEnquire *enq,
|
MuMsgIter *mu_msg_iter_new (XapianEnquire *enq,
|
||||||
size_t batchsize) G_GNUC_WARN_UNUSED_RESULT;
|
size_t batchsize, gboolean threads) G_GNUC_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the next message (which you got from
|
* get the next message (which you got from
|
||||||
|
@ -117,7 +118,23 @@ MuMsg* mu_msg_iter_get_msg (MuMsgIter *iter, GError **err)
|
||||||
unsigned int mu_msg_iter_get_docid (MuMsgIter *iter);
|
unsigned int mu_msg_iter_get_docid (MuMsgIter *iter);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* calculate the message threads
|
||||||
|
*
|
||||||
|
* @param iter a valid MuMsgIter iterator
|
||||||
|
*
|
||||||
|
* @return TRUE if it worked, FALSE otherwsie.
|
||||||
|
*/
|
||||||
|
gboolean mu_msg_iter_calculate_threads (MuMsgIter *iter);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get a sortable string describing the path of a thread
|
||||||
|
*
|
||||||
|
* @param iter a valid MuMsgIter iterator
|
||||||
|
*
|
||||||
|
* @return a thread path
|
||||||
|
*/
|
||||||
const char* mu_msg_iter_get_thread_path (MuMsgIter *iter);
|
const char* mu_msg_iter_get_thread_path (MuMsgIter *iter);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue