1 /* notmuch-private-cxx.h - Internal, C++ interfaces for notmuch.
3 * Copyright © 2009 Carl Worth
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see http://www.gnu.org/licenses/ .
18 * Author: Carl Worth <cworth@cworth.org>
21 #ifndef NOTMUCH_PRIVATE_CXX_H
22 #define NOTMUCH_PRIVATE_CXX_H
24 /* It's a bit annoying to have a separate C++ private header, but I
25 * don't yet have C wrappers for types like Xapian::Document and
26 * Xapian::PostingIterator. Maybe I'll write those to be able to fold
27 * this stuff back into notmuch-private.h */
29 #include "notmuch-private.h"
37 typedef struct _notmuch_terms {
39 Xapian::TermIterator iterator;
40 Xapian::TermIterator iterator_end;
43 struct _notmuch_tags {
44 notmuch_terms_t terms;
48 _notmuch_terms_create (void *ctx,
50 const char *prefix_name);
52 /* The assertion is to ensure that 'type' is a derivative of
53 * notmuch_terms_t in that it contains a notmuch_terms_t as its first
54 * member. We do this by name of 'terms' as opposed to type, because
55 * that's as clever as I've been so far. */
56 #define _notmuch_terms_create_type(ctx, doc, prefix_name, type) \
57 (COMPILE_TIME_ASSERT(offsetof(type, terms) == 0), \
58 (type *) _notmuch_terms_create (ctx, doc, prefix_name))