+/* Return a query that matches messages with the excluded tags
+ * registered with query. Any tags that explicitly appear in xquery
+ * will not be excluded. The caller of this function has to combine
+ * the returned query appropriately.*/
+static Xapian::Query
+_notmuch_exclude_tags (notmuch_query_t *query, Xapian::Query xquery)
+{
+ Xapian::Query exclude_query = Xapian::Query::MatchNothing;
+
+ for (notmuch_string_node_t *term = query->exclude_terms->head; term;
+ term = term->next) {
+ Xapian::TermIterator it = xquery.get_terms_begin ();
+ Xapian::TermIterator end = xquery.get_terms_end ();
+ for (; it != end; it++) {
+ if ((*it).compare (term->string) == 0)
+ break;
+ }
+ if (it == end)
+ exclude_query = Xapian::Query (Xapian::Query::OP_OR,
+ exclude_query, Xapian::Query (term->string));
+ }
+ return exclude_query;
+}
+