[honey] Make FORCED_CLOSE constant private
[xapian.git] / xapian-bindings / xapian-headers.i
bloba45d0dc05d02c7d5140806c97a2a62d391e9a054
1 %{
2 /* xapian-headers.i: Getting SWIG to parse Xapian's C++ headers.
4 * Copyright 2004,2006,2011,2012,2013,2014,2015,2016,2017 Olly Betts
5 * Copyright 2014 Assem Chelli
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation; either version 2 of the
10 * License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
20 * USA
24 /* Ignore these functions: */
25 %ignore Xapian::iterator_rewind;
26 %ignore Xapian::iterator_valid;
28 /* Ignore anything ending in an underscore, which is for internal use only: */
29 %rename("$ignore", regexmatch$name="_$") "";
31 /* A class which can usefully be subclassed in the target language. */
32 %define SUBCLASSABLE(NS, CLASS)
33 %ignore NS::CLASS::clone;
34 %ignore NS::CLASS::serialise;
35 %ignore NS::CLASS::unserialise;
36 %#ifdef XAPIAN_SWIG_DIRECTORS
37 %feature(director) NS::CLASS;
38 %#endif
39 %enddef
41 /* A class which is only useful to wrap if the target language allows
42 * subclassing of wrapped classes (what SWIG calls "director support").
44 #ifdef XAPIAN_SWIG_DIRECTORS
45 #define SUBCLASSABLE_ONLY(NS, CLASS) SUBCLASSABLE(NS, CLASS)
46 #else
47 #define SUBCLASSABLE_ONLY(NS, CLASS) %ignore NS::CLASS;
48 #endif
50 #ifdef SWIGTCL
51 /* Tcl needs copy constructors it seems. */
52 %define STANDARD_IGNORES(NS, CLASS)
53 %ignore NS::CLASS::internal;
54 %ignore NS::CLASS::CLASS(Internal*);
55 %ignore NS::CLASS::CLASS(Internal&);
56 %ignore NS::CLASS::operator=;
57 %enddef
58 #else
59 %define STANDARD_IGNORES(NS, CLASS)
60 %ignore NS::CLASS::internal;
61 %ignore NS::CLASS::CLASS(Internal*);
62 %ignore NS::CLASS::CLASS(Internal&);
63 %ignore NS::CLASS::operator=;
64 %ignore NS::CLASS::CLASS(const CLASS &);
65 %enddef
66 #endif
68 #ifdef SWIGCSHARP
69 /* In C#, next and prev return the iterator object. */
70 #define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) NS::CLASS METHOD() { return OP(*self); }
71 #elif defined SWIGJAVA
72 /* In Java, next and prev return the result of dereferencing the iterator. */
73 #define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) RET_TYPE METHOD() { return *(OP(*self)); }
74 #else
75 /* Otherwise, next and prev return void. */
76 #define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) void METHOD() { OP(*self); }
77 #endif
79 /* For other languages, SWIG already renames operator() suitably. */
80 #if defined SWIGJAVA || defined SWIGPHP || defined SWIGTCL
81 %rename(apply) *::operator();
82 #elif defined SWIGCSHARP
83 %rename(Apply) *::operator();
84 #endif
86 /* We use %ignore and %extend rather than %rename on operator* so that any
87 * pattern rename used to match local naming conventions applies to
88 * DEREF_METHOD.
90 %define INPUT_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
91 STANDARD_IGNORES(NS, CLASS)
92 %ignore NS::CLASS::operator++;
93 %ignore NS::CLASS::operator*;
94 %extend NS::CLASS {
95 bool equals(const NS::CLASS & o) const { return *self == o; }
96 RET_TYPE DEREF_METHOD() const { return **self; }
97 INC_OR_DEC(next, ++, NS, CLASS, RET_TYPE)
99 %enddef
101 %define RANDOM_ACCESS_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
102 INPUT_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
103 %ignore NS::CLASS::operator--;
104 %ignore NS::CLASS::operator+=;
105 %ignore NS::CLASS::operator-=;
106 %ignore NS::CLASS::operator+;
107 %ignore NS::CLASS::operator-;
108 %extend NS::CLASS {
109 INC_OR_DEC(prev, --, NS, CLASS, RET_TYPE)
111 %enddef
113 %define CONSTANT(TYPE, NS, NAME)
114 %ignore NS::NAME;
115 %constant TYPE NAME = NS::NAME;
116 %enddef
118 /* Ignore these for all classes: */
119 %ignore operator==;
120 %ignore operator!=;
121 %ignore operator<;
122 %ignore operator>;
123 %ignore operator<=;
124 %ignore operator>=;
125 %ignore operator+;
126 %ignore difference_type;
127 %ignore iterator_category;
128 %ignore value_type;
129 %ignore max_size;
130 %ignore swap;
131 %ignore iterator;
132 %ignore const_iterator;
133 %ignore size_type;
134 %ignore unserialise(const char **, const char *);
135 %ignore release();
137 /* These methods won't throw exceptions. */
138 %exception Xapian::major_version "$action"
139 %exception Xapian::minor_version "$action"
140 %exception Xapian::revision "$action"
141 %exception Xapian::version_string "$action"
142 // For XAPIAN_DOCID_BASE_TYPE and XAPIAN_TERMCOUNT_BASE_TYPE:
143 %import <xapian/version.h>
144 %include <xapian.h>
146 // Disable errors about not including headers individually.
147 #define XAPIAN_IN_XAPIAN_H
149 /* We don't wrap the version macros - they're useful for compile time checks
150 * in C++ code, but for a scripting language, the version functions tell us
151 * the version of Xapian we're actually using, which is more interesting than
152 * the one the bindings were built against.
154 /* %include <xapian/version.h> */
156 /* Types are needed by most of the other headers. */
157 %include <xapian/types.h>
159 CONSTANT(int, Xapian, DB_CREATE);
160 CONSTANT(int, Xapian, DB_CREATE_OR_OPEN);
161 CONSTANT(int, Xapian, DB_CREATE_OR_OVERWRITE);
162 CONSTANT(int, Xapian, DB_OPEN);
163 CONSTANT(int, Xapian, DB_NO_SYNC);
164 CONSTANT(int, Xapian, DB_FULL_SYNC);
165 CONSTANT(int, Xapian, DB_DANGEROUS);
166 CONSTANT(int, Xapian, DB_NO_TERMLIST);
167 CONSTANT(int, Xapian, DB_BACKEND_CHERT);
168 CONSTANT(int, Xapian, DB_BACKEND_GLASS);
169 CONSTANT(int, Xapian, DB_BACKEND_HONEY);
170 CONSTANT(int, Xapian, DB_BACKEND_INMEMORY);
171 CONSTANT(int, Xapian, DB_BACKEND_STUB);
172 CONSTANT(int, Xapian, DB_RETRY_LOCK);
173 CONSTANT(int, Xapian, DBCHECK_SHORT_TREE);
174 CONSTANT(int, Xapian, DBCHECK_FULL_TREE);
175 CONSTANT(int, Xapian, DBCHECK_SHOW_FREELIST);
176 CONSTANT(int, Xapian, DBCHECK_SHOW_STATS);
177 CONSTANT(int, Xapian, DBCHECK_FIX);
178 CONSTANT(int, Xapian, DBCOMPACT_MULTIPASS);
179 CONSTANT(int, Xapian, DBCOMPACT_NO_RENUMBER);
180 CONSTANT(int, Xapian, DBCOMPACT_SINGLE_FILE);
181 CONSTANT(int, Xapian, DOC_ASSUME_VALID);
182 %include <xapian/constants.h>
184 /* The Error subclasses are handled separately for languages where we wrap
185 * them. */
186 /* %include <xapian/error.h> */
188 INPUT_ITERATOR_METHODS(Xapian, PositionIterator, Xapian::termpos, get_termpos)
189 %include <xapian/positioniterator.h>
191 %ignore Xapian::DocIDWrapper;
192 INPUT_ITERATOR_METHODS(Xapian, PostingIterator, Xapian::docid, get_docid)
193 %include <xapian/postingiterator.h>
195 INPUT_ITERATOR_METHODS(Xapian, TermIterator, std::string, get_term)
196 %include <xapian/termiterator.h>
198 INPUT_ITERATOR_METHODS(Xapian, ValueIterator, std::string, get_value)
199 %include <xapian/valueiterator.h>
201 STANDARD_IGNORES(Xapian, Document)
202 %include <xapian/document.h>
204 STANDARD_IGNORES(Xapian, Registry)
205 %include <xapian/registry.h>
207 STANDARD_IGNORES(Xapian, Query)
208 %ignore Xapian::Query::Internal;
209 %ignore operator Query;
210 %ignore *::operator&(const Xapian::Query &, const Xapian::InvertedQuery_ &);
211 %ignore *::operator~;
212 %ignore *::operator&=;
213 %ignore *::operator|=;
214 %ignore *::operator^=;
215 %ignore *::operator*=;
216 %ignore *::operator/=;
217 #if defined SWIGCSHARP || defined SWIGJAVA || defined SWIGLUA || defined SWIGPHP
218 %ignore *::operator&;
219 %ignore *::operator|;
220 %ignore *::operator^;
221 %ignore *::operator*;
222 %ignore *::operator/;
223 #endif
224 %ignore Xapian::Query::LEAF_TERM;
225 %ignore Xapian::Query::LEAF_POSTING_SOURCE;
226 %ignore Xapian::Query::LEAF_MATCH_ALL;
227 %ignore Xapian::Query::LEAF_MATCH_NOTHING;
229 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::Query::Internal;
230 #if defined SWIGCSHARP || defined SWIGJAVA || defined SWIGPERL || \
231 defined SWIGPYTHON || defined SWIGRUBY
232 // C#, Java, Perl, Python and Ruby wrap these "by hand" to give a nicer API
233 // than SWIG gives by default.
234 %ignore Xapian::Query::MatchAll;
235 %ignore Xapian::Query::MatchNothing;
236 #endif
237 #ifndef XAPIAN_MIXED_SUBQUERIES_BY_ITERATOR_TYPEMAP
238 %ignore Query(op op_, XapianSWIGQueryItor qbegin, XapianSWIGQueryItor qend,
239 Xapian::termcount parameter = 0);
240 #endif
241 %include <xapian/query.h>
243 // Suppress warning that Xapian::Internal::intrusive_base is unknown.
244 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::StemImplementation;
245 SUBCLASSABLE_ONLY(Xapian, StemImplementation)
246 #ifndef XAPIAN_SWIG_DIRECTORS
247 %ignore Xapian::Stem::Stem(Xapian::StemImplementation *);
248 #endif
249 STANDARD_IGNORES(Xapian, Stem)
250 %ignore Xapian::Stem::Stem();
251 %include <xapian/stem.h>
253 STANDARD_IGNORES(Xapian, TermGenerator)
254 %ignore Xapian::TermGenerator::operator=;
255 /* Ignore forms which use Utf8Iterator, as we don't wrap that class. */
256 %ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &);
257 %ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &, Xapian::termcount);
258 %ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &, Xapian::termcount, const std::string &);
259 %ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &);
260 %ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &, Xapian::termcount);
261 %ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &, Xapian::termcount, const std::string &);
262 %ignore Xapian::TermGenerator::TermGenerator(const TermGenerator &);
263 %include <xapian/termgenerator.h>
265 STANDARD_IGNORES(Xapian, MSet)
266 #ifdef SWIGJAVA
267 // For compatibility with the original JNI wrappers.
268 %rename("getElement") Xapian::MSet::operator[];
269 #else
270 %ignore Xapian::MSet::operator[];
271 #endif
272 %extend Xapian::MSet {
273 Xapian::docid get_docid(Xapian::doccount i) const {
274 return *(*self)[i];
277 Xapian::Document get_document(Xapian::doccount i) const {
278 return (*self)[i].get_document();
281 Xapian::MSetIterator get_hit(Xapian::doccount i) const {
282 return (*self)[i];
285 int get_document_percentage(Xapian::doccount i) const {
286 return self->convert_to_percent((*self)[i]);
290 RANDOM_ACCESS_ITERATOR_METHODS(Xapian, MSetIterator, Xapian::docid, get_docid)
292 %include <xapian/mset.h>
294 STANDARD_IGNORES(Xapian, ESet)
295 %ignore Xapian::ESet::operator[];
297 RANDOM_ACCESS_ITERATOR_METHODS(Xapian, ESetIterator, std::string, get_term)
299 %include <xapian/eset.h>
301 STANDARD_IGNORES(Xapian, RSet)
303 %include <xapian/rset.h>
305 SUBCLASSABLE(Xapian, MatchDecider)
307 %include <xapian/matchdecider.h>
309 STANDARD_IGNORES(Xapian, Enquire)
311 #ifdef XAPIAN_TERMITERATOR_PAIR_OUTPUT_TYPEMAP
312 /* Instantiating the template we're going to use avoids SWIG wrapping uses
313 * of it in SwigValueWrapper.
315 %template() std::pair<Xapian::TermIterator, Xapian::TermIterator>;
317 %extend Xapian::Enquire {
318 /* This returns start and end iterators, then a typemap iterates between
319 * those and returns an array of strings in the target language.
321 std::pair<Xapian::TermIterator, Xapian::TermIterator>
322 get_matching_terms(const Xapian::MSetIterator & item) const {
323 return std::make_pair($self->get_matching_terms_begin(item),
324 $self->get_matching_terms_end(item));
327 #endif
329 %include <xapian/enquire.h>
331 SUBCLASSABLE(Xapian, ExpandDecider)
332 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
333 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::ExpandDecider;
334 %ignore Xapian::ExpandDeciderAnd::ExpandDeciderAnd(const ExpandDecider *, const ExpandDecider *);
335 /* FIXME: %extend ExpandDeciderFilterTerms so it can be constructed from an
336 * array of strings (or whatever the equivalent is in the target language).
338 %ignore Xapian::ExpandDeciderFilterTerms;
339 %include <xapian/expanddecider.h>
341 SUBCLASSABLE(Xapian, KeyMaker)
342 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
343 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::KeyMaker;
344 %include <xapian/keymaker.h>
346 %extend Xapian::SimpleStopper {
347 /** Load stop words from a text file (one word per line). */
348 SimpleStopper(const std::string &file) {
349 ifstream in_file(file.c_str());
350 if (!in_file.is_open())
351 throw Xapian::InvalidArgumentError("Stopword file not found: " + file);
352 istream_iterator<std::string> in_iter(in_file);
353 istream_iterator<std::string> eof;
354 return new Xapian::SimpleStopper(in_iter, eof);
358 SUBCLASSABLE(Xapian, FieldProcessor)
359 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
360 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::Stopper;
361 SUBCLASSABLE(Xapian, RangeProcessor)
362 SUBCLASSABLE(Xapian, Stopper)
363 SUBCLASSABLE(Xapian, ValueRangeProcessor)
364 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
365 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::RangeProcessor;
366 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::ValueRangeProcessor;
367 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::FieldProcessor;
368 STANDARD_IGNORES(Xapian, QueryParser)
369 %ignore Xapian::QueryParser::QueryParser(const QueryParser &);
370 CONSTANT(int, Xapian, RP_SUFFIX);
371 CONSTANT(int, Xapian, RP_REPEATED);
372 CONSTANT(int, Xapian, RP_DATE_PREFER_MDY);
373 %include <xapian/queryparser.h>
375 %include <xapian/valuesetmatchdecider.h>
377 /* Xapian::Weight isn't usefully subclassable via the bindings, as clone()
378 * needs to be implemented for it to be usable for weighting a search. But
379 * there are several supplied weighting schemes implemented in C++ which can
380 * usefully be used via the bindings so we wrap those.
382 STANDARD_IGNORES(Xapian, Weight)
383 /* The copy constructor isn't implemented, but is protected rather than
384 * private to work around a compiler bug, so we ignore it explicitly.
386 %ignore Xapian::Weight::Weight(const Weight &);
387 %ignore Xapian::Weight::clone;
388 %ignore Xapian::Weight::serialise;
389 %ignore Xapian::Weight::unserialise;
390 %include <xapian/weight.h>
392 /* We don't wrap Xapian's Unicode support as other languages usually already
393 * have their own Unicode support. */
394 /* %include <xapian/unicode.h> */
396 SUBCLASSABLE(Xapian, Compactor)
397 %include <xapian/compactor.h>
399 SUBCLASSABLE(Xapian, PostingSource)
400 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
401 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::PostingSource;
402 SUBCLASSABLE(Xapian, ValuePostingSource)
403 SUBCLASSABLE(Xapian, ValueWeightPostingSource)
404 %ignore Xapian::PostingSource::unserialise_with_registry;
405 %include <xapian/postingsource.h>
407 // Suppress warning that Xapian::Internal::intrusive_base is unknown.
408 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::MatchSpy;
409 SUBCLASSABLE(Xapian, MatchSpy)
410 %ignore Xapian::MatchSpy::serialise_results;
411 %include <xapian/matchspy.h>
413 SUBCLASSABLE(Xapian, LatLongMetric)
414 INPUT_ITERATOR_METHODS(Xapian, LatLongCoordsIterator, LatLongCoord, get_coord)
415 %ignore Xapian::LatLongCoord::operator<;
416 %include <xapian/geospatial.h>
418 STANDARD_IGNORES(Xapian, Database)
419 STANDARD_IGNORES(Xapian, WritableDatabase)
420 %ignore Xapian::WritableDatabase::WritableDatabase(Database::Internal *);
421 %ignore Xapian::Database::check(const std::string &, int, std::ostream *);
422 %ignore Xapian::Database::check(int fd, int, std::ostream *);
423 %include <xapian/database.h>
424 %extend Xapian::Database {
425 static size_t check(const std::string &path, int opts = 0) {
426 return Xapian::Database::check(path, opts, opts ? &std::cout : NULL);
430 #if defined SWIGCSHARP || defined SWIGJAVA
432 /* C# and Java don't allow functions outside a class so we can't use SWIG's
433 * %nspace feature here. Instead we pretend to SWIG that the C++
434 * Xapian::Remote namespace is actually a Xapian::Remote class with public
435 * static functions. The code SWIG generates will work fine, and we get
436 * xapian.Remote.open() in Java and Xapian.Remote.open() in C#.
439 namespace Xapian {
441 class Remote {
442 // Private constructor and destructor so SWIG doesn't try to call them.
443 Remote();
444 ~Remote();
445 public:
446 static Database open(const std::string &host,
447 unsigned int port,
448 unsigned timeout = 10000,
449 unsigned connect_timeout = 10000);
451 static WritableDatabase open_writable(const std::string &host,
452 unsigned int port,
453 unsigned timeout = 0,
454 unsigned connect_timeout = 10000,
455 int flags = 0);
457 static Database open(const std::string &program,
458 const std::string &args,
459 unsigned timeout = 10000);
461 static WritableDatabase open_writable(const std::string &program,
462 const std::string &args,
463 unsigned timeout = 0,
464 int flags = 0);
469 #else
471 %rename("remote_open") Xapian::Remote::open;
472 %rename("remote_open_writable") Xapian::Remote::open_writable;
474 %include <xapian/dbfactory.h>
476 #endif