Move find_prefix function from database.cc to message.cc

It's definitely a better fit there for now, (and can likely
eventually be made static as add_term moves from database
to message as well).
This commit is contained in:
Carl Worth 2009-10-21 14:07:40 -07:00
parent baf1867cc4
commit 6142216132
3 changed files with 61 additions and 57 deletions

View file

@ -28,61 +28,6 @@
using namespace std;
#define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0]))
/* Xapian complains if we provide a term longer than this. */
#define NOTMUCH_MAX_TERM 245
/* These prefix values are specifically chosen to be compatible
* with sup, (http://sup.rubyforge.org), written by
* William Morgan <wmorgan-sup@masanjin.net>, and released
* under the GNU GPL v2.
*/
typedef struct {
const char *name;
const char *prefix;
} prefix_t;
prefix_t NORMAL_PREFIX[] = {
{ "subject", "S" },
{ "body", "B" },
{ "from_name", "FN" },
{ "to_name", "TN" },
{ "name", "N" },
{ "attachment", "A" }
};
prefix_t BOOLEAN_PREFIX[] = {
{ "type", "K" },
{ "from_email", "FE" },
{ "to_email", "TE" },
{ "email", "E" },
{ "date", "D" },
{ "label", "L" },
{ "source_id", "I" },
{ "attachment_extension", "O" },
{ "msgid", "Q" },
{ "thread", "H" },
{ "ref", "R" }
};
static const char *
find_prefix (const char *name)
{
unsigned int i;
for (i = 0; i < ARRAY_SIZE (NORMAL_PREFIX); i++)
if (strcmp (name, NORMAL_PREFIX[i].name) == 0)
return NORMAL_PREFIX[i].prefix;
for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX); i++)
if (strcmp (name, BOOLEAN_PREFIX[i].name) == 0)
return BOOLEAN_PREFIX[i].prefix;
return "";
}
/* "128 bits of thread-id ought to be enough for anybody" */
#define NOTMUCH_THREAD_ID_BITS 128
#define NOTMUCH_THREAD_ID_DIGITS (NOTMUCH_THREAD_ID_BITS / 4)
@ -130,7 +75,7 @@ add_term (Xapian::Document doc,
if (value == NULL)
return;
prefix = find_prefix (prefix_name);
prefix = _find_prefix (prefix_name);
term = g_strdup_printf ("%s%s", prefix, value);
@ -150,7 +95,7 @@ find_messages_by_term (Xapian::Database *db,
Xapian::PostingIterator i;
char *term;
term = g_strdup_printf ("%s%s", find_prefix (prefix_name), value);
term = g_strdup_printf ("%s%s", _find_prefix (prefix_name), value);
*begin = db->postlist_begin (term);

View file

@ -32,6 +32,58 @@ struct _notmuch_tags {
Xapian::TermIterator iterator_end;
};
#define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0]))
/* These prefix values are specifically chosen to be compatible
* with sup, (http://sup.rubyforge.org), written by
* William Morgan <wmorgan-sup@masanjin.net>, and released
* under the GNU GPL v2.
*/
typedef struct {
const char *name;
const char *prefix;
} prefix_t;
prefix_t NORMAL_PREFIX[] = {
{ "subject", "S" },
{ "body", "B" },
{ "from_name", "FN" },
{ "to_name", "TN" },
{ "name", "N" },
{ "attachment", "A" }
};
prefix_t BOOLEAN_PREFIX[] = {
{ "type", "K" },
{ "from_email", "FE" },
{ "to_email", "TE" },
{ "email", "E" },
{ "date", "D" },
{ "label", "L" },
{ "source_id", "I" },
{ "attachment_extension", "O" },
{ "msgid", "Q" },
{ "thread", "H" },
{ "ref", "R" }
};
const char *
_find_prefix (const char *name)
{
unsigned int i;
for (i = 0; i < ARRAY_SIZE (NORMAL_PREFIX); i++)
if (strcmp (name, NORMAL_PREFIX[i].name) == 0)
return NORMAL_PREFIX[i].prefix;
for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX); i++)
if (strcmp (name, BOOLEAN_PREFIX[i].name) == 0)
return BOOLEAN_PREFIX[i].prefix;
return "";
}
/* We end up having to call the destructor explicitly because we had
* to use "placement new" in order to initialize C++ objects within a
* block that we allocated with talloc. So C++ is making talloc

View file

@ -76,6 +76,9 @@ typedef enum {
NOTMUCH_VALUE_DATE = 2
} notmuch_value_t;
/* Xapian complains if we provide a term longer than this. */
#define NOTMUCH_MAX_TERM 245
/* message.cc */
notmuch_message_t *
@ -83,6 +86,10 @@ _notmuch_message_create (notmuch_results_t *owner,
notmuch_database_t *notmuch,
unsigned int doc_id);
/* Lookup a prefix value by name. */
const char *
_find_prefix (const char *name);
/* message-file.c */
/* XXX: I haven't decided yet whether these will actually get exported