summaryrefslogtreecommitdiff
path: root/notmuch-private.h
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2009-10-25 14:54:13 -0700
committerCarl Worth <cworth@cworth.org>2009-10-25 14:54:13 -0700
commita360670c03475b1489ea5e2327cc3037cc8dff0b (patch)
treee30dd0679d50c5c89de11936139be28b3a93b573 /notmuch-private.h
parentec77f6b50cb460dc8c376eeee045a25ed390c337 (diff)
Change database to store only a single thread ID per message.
Instead of supporting multiple thread IDs, we now merge together thread IDs if one message is ever found to belong to more than one thread. This allows for constructing complete threads when, for example, a child message doesn't include a complete list of References headers back to the beginning of the thread. It also simplifies dealing with mapping a message ID to a thread ID which is now a simple get_thread_id just like get_message_id, (and no longer an iterator-based thing like get_tags).
Diffstat (limited to 'notmuch-private.h')
-rw-r--r--notmuch-private.h37
1 files changed, 31 insertions, 6 deletions
diff --git a/notmuch-private.h b/notmuch-private.h
index 53b4f1d..be1fb63 100644
--- a/notmuch-private.h
+++ b/notmuch-private.h
@@ -46,21 +46,31 @@ NOTMUCH_BEGIN_DECLS
#include "xutil.h"
+#ifdef DEBUG
+# define DEBUG_DATABASE_SANITY 1
+# define DEBUG_QUERY 1
+#endif
+
#define COMPILE_TIME_ASSERT(pred) ((void)sizeof(char[1 - 2*!(pred)]))
/* There's no point in continuing when we've detected that we've done
* something wrong internally (as opposed to the user passing in a
* bogus value).
*
+ * Note that PRINTF_ATTRIBUTE comes from talloc.h
+ */
+int
+_internal_error (const char *format, ...) PRINTF_ATTRIBUTE (1, 2);
+
+/* There's no point in continuing when we've detected that we've done
+ * something wrong internally (as opposed to the user passing in a
+ * bogus value).
+ *
* Note that __location__ comes from talloc.h.
*/
#define INTERNAL_ERROR(format, ...) \
- do { \
- fprintf(stderr, \
- "Internal error: " format " (%s)\n", \
- ##__VA_ARGS__, __location__); \
- exit (1); \
- } while (0)
+ _internal_error (format " (%s).\n", \
+ ##__VA_ARGS__, __location__)
/* Thanks to Andrew Tridgell's (SAMBA's) talloc for this definition of
* unlikely. The talloc source code comes to us via the GNU LGPL v. 3.
@@ -110,6 +120,21 @@ typedef enum _notmuch_private_status {
NOTMUCH_PRIVATE_STATUS_LAST_STATUS
} notmuch_private_status_t;
+/* Coerce a notmuch_private_status_t value to a notmuch_status_t
+ * value, generating an internal error if the private value is equal
+ * to or greater than NOTMUCH_STATUS_LAST_STATUS. (The idea here is
+ * that the caller has previously handled any expected
+ * notmuch_private_status_t values.)
+ */
+#define COERCE_STATUS(private_status, format, ...) \
+ ((private_status >= (notmuch_private_status_t) NOTMUCH_STATUS_LAST_STATUS)\
+ ? \
+ (notmuch_status_t) _internal_error (format " (%s).\n", \
+ ##__VA_ARGS__, \
+ __location__) \
+ : \
+ (notmuch_status_t) private_status)
+
/* message.cc */
notmuch_message_t *