Clarify LatLongCoord::operator< purpose
[xapian.git] / xapian-bindings / xapian-headers.i
blob276b798202ee9931d2c4a68bbbd1636cda7a003f
1 %{
2 /* xapian-headers.i: Getting SWIG to parse Xapian's C++ headers.
4 * Copyright 2004,2006,2011,2012,2013,2014,2015,2016 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;
27 %ignore Xapian::sortable_serialise_;
29 /* A class which can usefully be subclassed in the target language. */
30 %define SUBCLASSABLE(NS, CLASS)
31 %ignore NS::CLASS::clone;
32 %ignore NS::CLASS::serialise;
33 %ignore NS::CLASS::unserialise;
34 %#ifdef XAPIAN_SWIG_DIRECTORS
35 %feature(director) NS::CLASS;
36 %#endif
37 %enddef
39 /* A class which is only useful to wrap if the target language allows
40 * subclassing of wrapped classes (what SWIG calls "director support").
42 #ifdef XAPIAN_SWIG_DIRECTORS
43 #define SUBCLASSABLE_ONLY(NS, CLASS) SUBCLASSABLE(NS, CLASS)
44 #else
45 #define SUBCLASSABLE_ONLY(NS, CLASS) %ignore NS::CLASS;
46 #endif
48 #ifdef SWIGTCL
49 /* Tcl needs copy constructors it seems. */
50 %define STANDARD_IGNORES(NS, CLASS)
51 %ignore NS::CLASS::internal;
52 %ignore NS::CLASS::CLASS(Internal*);
53 %ignore NS::CLASS::CLASS(Internal&);
54 %ignore NS::CLASS::operator=;
55 %enddef
56 #else
57 %define STANDARD_IGNORES(NS, CLASS)
58 %ignore NS::CLASS::internal;
59 %ignore NS::CLASS::CLASS(Internal*);
60 %ignore NS::CLASS::CLASS(Internal&);
61 %ignore NS::CLASS::operator=;
62 %ignore NS::CLASS::CLASS(const CLASS &);
63 %enddef
64 #endif
66 #ifdef SWIGCSHARP
67 /* In C#, next and prev return the iterator object. */
68 #define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) NS::CLASS METHOD() { return OP(*self); }
69 #elif defined SWIGJAVA
70 /* In Java, next and prev return the result of dereferencing the iterator. */
71 #define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) RET_TYPE METHOD() { return *(OP(*self)); }
72 #else
73 /* Otherwise, next and prev return void. */
74 #define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) void METHOD() { OP(*self); }
75 #endif
77 /* For other languages, SWIG already renames operator() suitably. */
78 #if defined SWIGJAVA || defined SWIGPHP || defined SWIGTCL
79 %rename(apply) *::operator();
80 #elif defined SWIGCSHARP
81 %rename(Apply) *::operator();
82 #endif
84 /* We use %ignore and %extend rather than %rename on operator* so that any
85 * pattern rename used to match local naming conventions applies to
86 * DEREF_METHOD.
88 %define INPUT_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
89 STANDARD_IGNORES(NS, CLASS)
90 %ignore NS::CLASS::operator++;
91 %ignore NS::CLASS::operator*;
92 %extend NS::CLASS {
93 bool equals(const NS::CLASS & o) const { return *self == o; }
94 RET_TYPE DEREF_METHOD() const { return **self; }
95 INC_OR_DEC(next, ++, NS, CLASS, RET_TYPE)
97 %enddef
99 %define BIDIRECTIONAL_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
100 INPUT_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
101 %ignore NS::CLASS::operator--;
102 %extend NS::CLASS {
103 INC_OR_DEC(prev, --, NS, CLASS, RET_TYPE)
105 %enddef
107 %define CONSTANT(TYPE, NS, NAME)
108 %ignore NS::NAME;
109 %constant TYPE NAME = NS::NAME;
110 %enddef
112 /* Ignore these for all classes: */
113 %ignore operator==;
114 %ignore operator!=;
115 %ignore difference_type;
116 %ignore iterator_category;
117 %ignore value_type;
118 %ignore max_size;
119 %ignore swap;
120 %ignore iterator;
121 %ignore const_iterator;
122 %ignore size_type;
123 %ignore unserialise(const char **, const char *);
124 %ignore release();
126 /* These methods won't throw exceptions. */
127 %exception Xapian::major_version "$action"
128 %exception Xapian::minor_version "$action"
129 %exception Xapian::revision "$action"
130 %exception Xapian::version_string "$action"
131 // For XAPIAN_DOCID_BASE_TYPE and XAPIAN_TERMCOUNT_BASE_TYPE:
132 %import <xapian/version.h>
133 %include <xapian.h>
135 // Disable errors about not including headers individually.
136 #define XAPIAN_IN_XAPIAN_H
138 /* We don't wrap the version macros - they're useful for compile time checks
139 * in C++ code, but for a scripting language, the version functions tell us
140 * the version of Xapian we're actually using, which is more interesting than
141 * the one the bindings were built against.
143 /* %include <xapian/version.h> */
145 /* Types are needed by most of the other headers. */
146 %include <xapian/types.h>
148 CONSTANT(int, Xapian, DB_CREATE);
149 CONSTANT(int, Xapian, DB_CREATE_OR_OPEN);
150 CONSTANT(int, Xapian, DB_CREATE_OR_OVERWRITE);
151 CONSTANT(int, Xapian, DB_OPEN);
152 CONSTANT(int, Xapian, DB_NO_SYNC);
153 CONSTANT(int, Xapian, DB_FULL_SYNC);
154 CONSTANT(int, Xapian, DB_DANGEROUS);
155 CONSTANT(int, Xapian, DB_NO_TERMLIST);
156 CONSTANT(int, Xapian, DB_BACKEND_CHERT);
157 CONSTANT(int, Xapian, DB_BACKEND_GLASS);
158 CONSTANT(int, Xapian, DB_BACKEND_STUB);
159 CONSTANT(int, Xapian, DB_RETRY_LOCK);
160 CONSTANT(int, Xapian, DBCHECK_SHORT_TREE);
161 CONSTANT(int, Xapian, DBCHECK_FULL_TREE);
162 CONSTANT(int, Xapian, DBCHECK_SHOW_FREELIST);
163 CONSTANT(int, Xapian, DBCHECK_SHOW_STATS);
164 CONSTANT(int, Xapian, DBCHECK_FIX);
165 CONSTANT(int, Xapian, DBCOMPACT_MULTIPASS);
166 CONSTANT(int, Xapian, DBCOMPACT_NO_RENUMBER);
167 CONSTANT(int, Xapian, DBCOMPACT_SINGLE_FILE);
168 %include <xapian/constants.h>
170 /* The Error subclasses are handled separately for languages where we wrap
171 * them. */
172 /* %include <xapian/error.h> */
174 /* ErrorHandler isn't currently wrapped. */
175 /* %include <xapian/errorhandler.h> */
177 INPUT_ITERATOR_METHODS(Xapian, PositionIterator, Xapian::termpos, get_termpos)
178 %include <xapian/positioniterator.h>
180 %ignore Xapian::DocIDWrapper;
181 INPUT_ITERATOR_METHODS(Xapian, PostingIterator, Xapian::docid, get_docid)
182 %include <xapian/postingiterator.h>
184 INPUT_ITERATOR_METHODS(Xapian, TermIterator, std::string, get_term)
185 %include <xapian/termiterator.h>
187 INPUT_ITERATOR_METHODS(Xapian, ValueIterator, std::string, get_value)
188 %include <xapian/valueiterator.h>
190 STANDARD_IGNORES(Xapian, Document)
191 %include <xapian/document.h>
193 STANDARD_IGNORES(Xapian, Registry)
194 %include <xapian/registry.h>
196 STANDARD_IGNORES(Xapian, Query)
197 %ignore Xapian::Query::Internal;
198 %ignore Xapian::InvertedQuery_;
199 %ignore operator Query;
200 %ignore *::operator&(const Xapian::Query &, const Xapian::InvertedQuery_ &);
201 %ignore *::operator~;
202 %ignore *::operator&=;
203 %ignore *::operator|=;
204 %ignore *::operator^=;
205 %ignore *::operator*=;
206 %ignore *::operator/=;
207 #if defined SWIGCSHARP || defined SWIGJAVA || defined SWIGLUA || defined SWIGPHP
208 %ignore *::operator&;
209 %ignore *::operator|;
210 %ignore *::operator^;
211 %ignore *::operator*;
212 %ignore *::operator/;
213 #endif
214 %ignore Xapian::Query::LEAF_TERM;
215 %ignore Xapian::Query::LEAF_POSTING_SOURCE;
216 %ignore Xapian::Query::LEAF_MATCH_ALL;
217 %ignore Xapian::Query::LEAF_MATCH_NOTHING;
219 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::Query::Internal;
220 #if defined SWIGCSHARP || defined SWIGJAVA || defined SWIGPERL || \
221 defined SWIGPYTHON || defined SWIGRUBY
222 // C#, Java, Perl, Python and Ruby wrap these "by hand" to give a nicer API
223 // than SWIG gives by default.
224 %ignore Xapian::Query::MatchAll;
225 %ignore Xapian::Query::MatchNothing;
226 #endif
227 #ifndef XAPIAN_MIXED_SUBQUERIES_BY_ITERATOR_TYPEMAP
228 %ignore Query(op op_, XapianSWIGQueryItor qbegin, XapianSWIGQueryItor qend,
229 Xapian::termcount parameter = 0);
230 #endif
231 %include <xapian/query.h>
233 // Suppress warning that Xapian::Internal::intrusive_base is unknown.
234 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::StemImplementation;
235 SUBCLASSABLE_ONLY(Xapian, StemImplementation)
236 #ifndef XAPIAN_SWIG_DIRECTORS
237 %ignore Xapian::Stem::Stem(Xapian::StemImplementation *);
238 #endif
239 STANDARD_IGNORES(Xapian, Stem)
240 %ignore Xapian::Stem::Stem();
241 %include <xapian/stem.h>
243 STANDARD_IGNORES(Xapian, TermGenerator)
244 %ignore Xapian::TermGenerator::operator=;
245 /* Ignore forms which use Utf8Iterator, as we don't wrap that class. */
246 %ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &);
247 %ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &, Xapian::termcount);
248 %ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &, Xapian::termcount, const std::string &);
249 %ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &);
250 %ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &, Xapian::termcount);
251 %ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &, Xapian::termcount, const std::string &);
252 %ignore Xapian::TermGenerator::TermGenerator(const TermGenerator &);
253 %include <xapian/termgenerator.h>
255 STANDARD_IGNORES(Xapian, MSet)
256 #ifdef SWIGJAVA
257 // For compatibility with the original JNI wrappers.
258 %rename("getElement") Xapian::MSet::operator[];
259 #else
260 %ignore Xapian::MSet::operator[];
261 #endif
262 %extend Xapian::MSet {
263 Xapian::docid get_docid(Xapian::doccount i) const {
264 return *(*self)[i];
267 Xapian::Document get_document(Xapian::doccount i) const {
268 return (*self)[i].get_document();
271 Xapian::MSetIterator get_hit(Xapian::doccount i) const {
272 return (*self)[i];
275 Xapian::percent get_document_percentage(Xapian::doccount i) const {
276 return self->convert_to_percent((*self)[i]);
280 BIDIRECTIONAL_ITERATOR_METHODS(Xapian, MSetIterator, Xapian::docid, get_docid)
282 %include <xapian/mset.h>
284 STANDARD_IGNORES(Xapian, ESet)
285 %ignore Xapian::ESet::operator[];
286 STANDARD_IGNORES(Xapian, RSet)
288 STANDARD_IGNORES(Xapian, Enquire)
290 BIDIRECTIONAL_ITERATOR_METHODS(Xapian, ESetIterator, std::string, get_term)
292 SUBCLASSABLE(Xapian, MatchDecider)
294 #ifdef XAPIAN_TERMITERATOR_PAIR_OUTPUT_TYPEMAP
295 /* Instantiating the template we're going to use avoids SWIG wrapping uses
296 * of it in SwigValueWrapper.
298 %template() std::pair<Xapian::TermIterator, Xapian::TermIterator>;
300 %extend Xapian::Enquire {
301 /* This returns start and end iterators, then a typemap iterates between
302 * those and returns an array of strings in the target language.
304 std::pair<Xapian::TermIterator, Xapian::TermIterator>
305 get_matching_terms(const Xapian::MSetIterator & item) const {
306 return std::make_pair($self->get_matching_terms_begin(item),
307 $self->get_matching_terms_end(item));
310 #endif
312 /* We don't wrap ErrorHandler, so ignore the optional ErrorHandler parameter.
314 %ignore Enquire(const Database &, ErrorHandler *);
316 %include <xapian/enquire.h>
318 SUBCLASSABLE(Xapian, ExpandDecider)
319 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
320 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::ExpandDecider;
321 %ignore Xapian::ExpandDeciderAnd::ExpandDeciderAnd(const ExpandDecider *, const ExpandDecider *);
322 /* FIXME: %extend ExpandDeciderFilterTerms so it can be constructed from an
323 * array of strings (or whatever the equivalent is in the target language).
325 %ignore Xapian::ExpandDeciderFilterTerms;
326 %include <xapian/expanddecider.h>
328 SUBCLASSABLE(Xapian, KeyMaker)
329 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
330 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::KeyMaker;
331 %include <xapian/keymaker.h>
333 %extend Xapian::SimpleStopper {
334 /** Load stop words from a text file (one word per line). */
335 SimpleStopper(const std::string &file) {
336 ifstream in_file(file.c_str());
337 if (!in_file.is_open())
338 throw Xapian::InvalidArgumentError("Stopword file not found: " + file);
339 istream_iterator<std::string> in_iter(in_file);
340 istream_iterator<std::string> eof;
341 return new Xapian::SimpleStopper(in_iter, eof);
345 SUBCLASSABLE(Xapian, FieldProcessor)
346 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
347 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::Stopper;
348 SUBCLASSABLE(Xapian, Stopper)
349 SUBCLASSABLE(Xapian, ValueRangeProcessor)
350 // Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
351 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::ValueRangeProcessor;
352 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::FieldProcessor;
353 STANDARD_IGNORES(Xapian, QueryParser)
354 %ignore Xapian::QueryParser::QueryParser(const QueryParser &);
355 %include <xapian/queryparser.h>
357 %include <xapian/valuesetmatchdecider.h>
359 /* Xapian::Weight isn't usefully subclassable via the bindings, as clone()
360 * needs to be implemented for it to be usable for weighting a search. But
361 * there are several supplied weighting schemes implemented in C++ which can
362 * usefully be used via the bindings so we wrap those.
364 STANDARD_IGNORES(Xapian, Weight)
365 /* The copy constructor isn't implemented, but is protected rather than
366 * private to work around a compiler bug, so we ignore it explicitly.
368 %ignore Xapian::Weight::Weight(const Weight &);
369 %ignore Xapian::Weight::clone;
370 %ignore Xapian::Weight::clone_;
371 %ignore Xapian::Weight::init_;
372 %ignore Xapian::Weight::get_sumpart_needs_doclength_;
373 %ignore Xapian::Weight::get_sumpart_needs_uniqueterms_;
374 %ignore Xapian::Weight::get_sumpart_needs_wdf_;
375 %ignore Xapian::Weight::serialise;
376 %ignore Xapian::Weight::unserialise;
377 %include <xapian/weight.h>
379 /* We don't wrap Xapian's Unicode support as other languages usually already
380 * have their own Unicode support. */
381 /* %include <xapian/unicode.h> */
383 SUBCLASSABLE(Xapian, Compactor)
384 %include <xapian/compactor.h>
386 SUBCLASSABLE(Xapian, PostingSource)
387 SUBCLASSABLE(Xapian, ValuePostingSource)
388 SUBCLASSABLE(Xapian, ValueWeightPostingSource)
389 %ignore Xapian::PostingSource::register_matcher_;
390 %ignore Xapian::PostingSource::unserialise_with_registry;
391 %include <xapian/postingsource.h>
393 // Suppress warning that Xapian::Internal::intrusive_base is unknown.
394 %warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::MatchSpy;
395 SUBCLASSABLE(Xapian, MatchSpy)
396 %ignore Xapian::MatchSpy::serialise_results;
397 %include <xapian/matchspy.h>
399 SUBCLASSABLE(Xapian, LatLongMetric)
400 INPUT_ITERATOR_METHODS(Xapian, LatLongCoordsIterator, LatLongCoord, get_coord)
401 %ignore Xapian::LatLongCoord::operator<;
402 %include <xapian/geospatial.h>
404 STANDARD_IGNORES(Xapian, Database)
405 STANDARD_IGNORES(Xapian, WritableDatabase)
406 %ignore Xapian::WritableDatabase::WritableDatabase(Database::Internal *);
407 %ignore Xapian::Database::get_document_lazily_;
408 %ignore Xapian::Database::check(const std::string &, int, std::ostream *);
409 %ignore Xapian::Database::check(int fd, int, std::ostream *);
410 %include <xapian/database.h>
411 %extend Xapian::Database {
412 static size_t check(const std::string &path, int opts = 0) {
413 return Xapian::Database::check(path, opts, opts ? &std::cout : NULL);
417 #if defined SWIGCSHARP || defined SWIGJAVA
419 /* xapian/dbfactory.h is currently wrapped via fake class declarations in
420 * fake_dbfactory.i for C# and Java. */
422 #else
424 %rename("inmemory_open") Xapian::InMemory::open;
426 #ifdef XAPIAN_BINDINGS_SKIP_DEPRECATED_DB_FACTORIES
427 %ignore Xapian::Chert::open;
428 %ignore Xapian::Auto::open_stub;
429 #else
431 /* SWIG Tcl wrappers don't call destructors for classes returned by factory
432 * functions, so we don't wrap them so users are forced to use the
433 * WritableDatabase ctor instead. */
434 #ifdef SWIGTCL
435 %ignore Xapian::Chert::open(const std::string &dir, int action, int block_size = 8192);
436 #endif
438 %rename("chert_open") Xapian::Chert::open;
440 #ifndef SWIGPHP
441 /* PHP renames this to auto_open_stub() in php/php.i. */
442 %rename("open_stub") Xapian::Auto::open_stub;
443 #endif
445 #endif
447 %rename("remote_open") Xapian::Remote::open;
448 %rename("remote_open_writable") Xapian::Remote::open_writable;
450 %include <xapian/dbfactory.h>
452 #endif