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
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
;
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
)
45 #define SUBCLASSABLE_ONLY
(NS
, CLASS
) %ignore NS
::CLASS
;
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
=;
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
&);
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
)); }
73 /* Otherwise
, next and prev return void.
*/
74 #define INC_OR_DEC
(METHOD
, OP
, NS
, CLASS
, RET_TYPE
) void METHOD
() { OP
(*self
); }
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
();
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
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
*;
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
)
99 %define RANDOM_ACCESS_ITERATOR_METHODS
(NS
, CLASS
, RET_TYPE
, DEREF_METHOD
)
100 INPUT_ITERATOR_METHODS
(NS
, CLASS
, RET_TYPE
, DEREF_METHOD
)
101 %ignore NS
::CLASS
::operator--
;
102 %ignore NS
::CLASS
::operator
+=;
103 %ignore NS
::CLASS
::operator-
=;
104 %ignore NS
::CLASS
::operator
+;
105 %ignore NS
::CLASS
::operator-
;
107 INC_OR_DEC
(prev
, --, NS
, CLASS
, RET_TYPE
)
111 %define CONSTANT
(TYPE, NS
, NAME)
113 %constant
TYPE NAME = NS
::NAME;
116 /* Ignore these for all classes
: */
124 %ignore difference_type
;
125 %ignore iterator_category
;
130 %ignore const_iterator
;
132 %ignore unserialise
(const char
**, const char
*);
135 /* These methods won't throw exceptions.
*/
136 %exception Xapian
::major_version
"$action"
137 %exception Xapian
::minor_version
"$action"
138 %exception Xapian
::revision
"$action"
139 %exception Xapian
::version_string
"$action"
140 // For XAPIAN_DOCID_BASE_TYPE and XAPIAN_TERMCOUNT_BASE_TYPE
:
141 %import
<xapian
/version.h
>
144 // Disable errors about not including headers individually.
145 #define XAPIAN_IN_XAPIAN_H
147 /* We don't wrap the version macros
- they're useful for compile time checks
148 * in C
++ code
, but for a scripting language
, the version functions tell us
149 * the version of Xapian we're actually using
, which is more interesting than
150 * the one the bindings were built against.
152 /* %include
<xapian
/version.h
> */
154 /* Types are needed by most of the other headers.
*/
155 %include
<xapian
/types.h
>
157 CONSTANT
(int
, Xapian
, DB_CREATE
);
158 CONSTANT
(int
, Xapian
, DB_CREATE_OR_OPEN
);
159 CONSTANT
(int
, Xapian
, DB_CREATE_OR_OVERWRITE
);
160 CONSTANT
(int
, Xapian
, DB_OPEN
);
161 CONSTANT
(int
, Xapian
, DB_NO_SYNC
);
162 CONSTANT
(int
, Xapian
, DB_FULL_SYNC
);
163 CONSTANT
(int
, Xapian
, DB_DANGEROUS
);
164 CONSTANT
(int
, Xapian
, DB_NO_TERMLIST
);
165 CONSTANT
(int
, Xapian
, DB_BACKEND_CHERT
);
166 CONSTANT
(int
, Xapian
, DB_BACKEND_GLASS
);
167 CONSTANT
(int
, Xapian
, DB_BACKEND_INMEMORY
);
168 CONSTANT
(int
, Xapian
, DB_BACKEND_STUB
);
169 CONSTANT
(int
, Xapian
, DB_RETRY_LOCK
);
170 CONSTANT
(int
, Xapian
, DBCHECK_SHORT_TREE
);
171 CONSTANT
(int
, Xapian
, DBCHECK_FULL_TREE
);
172 CONSTANT
(int
, Xapian
, DBCHECK_SHOW_FREELIST
);
173 CONSTANT
(int
, Xapian
, DBCHECK_SHOW_STATS
);
174 CONSTANT
(int
, Xapian
, DBCHECK_FIX
);
175 CONSTANT
(int
, Xapian
, DBCOMPACT_MULTIPASS
);
176 CONSTANT
(int
, Xapian
, DBCOMPACT_NO_RENUMBER
);
177 CONSTANT
(int
, Xapian
, DBCOMPACT_SINGLE_FILE
);
178 %include
<xapian
/constants.h
>
180 /* The Error subclasses are handled separately for languages where we wrap
182 /* %include
<xapian
/error.h
> */
184 /* ErrorHandler isn't currently wrapped.
*/
185 /* %include
<xapian
/errorhandler.h
> */
187 INPUT_ITERATOR_METHODS
(Xapian
, PositionIterator
, Xapian
::termpos
, get_termpos
)
188 %include
<xapian
/positioniterator.h
>
190 %ignore Xapian
::DocIDWrapper
;
191 INPUT_ITERATOR_METHODS
(Xapian
, PostingIterator
, Xapian
::docid
, get_docid
)
192 %include
<xapian
/postingiterator.h
>
194 INPUT_ITERATOR_METHODS
(Xapian
, TermIterator
, std
::string
, get_term
)
195 %include
<xapian
/termiterator.h
>
197 INPUT_ITERATOR_METHODS
(Xapian
, ValueIterator
, std
::string
, get_value
)
198 %include
<xapian
/valueiterator.h
>
200 STANDARD_IGNORES
(Xapian
, Document
)
201 %include
<xapian
/document.h
>
203 STANDARD_IGNORES
(Xapian
, Registry
)
204 %include
<xapian
/registry.h
>
206 STANDARD_IGNORES
(Xapian
, Query
)
207 %ignore Xapian
::Query
::Internal
;
208 %ignore Xapian
::InvertedQuery_
;
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
/;
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
;
237 #ifndef XAPIAN_MIXED_SUBQUERIES_BY_ITERATOR_TYPEMAP
238 %ignore Query
(op op_
, XapianSWIGQueryItor qbegin
, XapianSWIGQueryItor qend
,
239 Xapian
::termcount parameter
= 0);
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
*);
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
)
267 // For compatibility with the original JNI wrappers.
268 %rename
("getElement") Xapian
::MSet
::operator
[];
270 %ignore Xapian
::MSet
::operator
[];
272 %extend Xapian
::MSet
{
273 Xapian
::docid get_docid
(Xapian
::doccount i
) const
{
277 Xapian
::Document get_document
(Xapian
::doccount i
) const
{
278 return
(*self
)[i
].get_document
();
281 Xapian
::MSetIterator get_hit
(Xapian
::doccount i
) const
{
285 Xapian
::percent 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 STANDARD_IGNORES
(Xapian
, Enquire
)
305 SUBCLASSABLE
(Xapian
, MatchDecider
)
307 #ifdef XAPIAN_TERMITERATOR_PAIR_OUTPUT_TYPEMAP
308 /* Instantiating the template we're going to use avoids SWIG wrapping uses
309 * of it in SwigValueWrapper.
311 %template
() std
::pair
<Xapian
::TermIterator
, Xapian
::TermIterator
>;
313 %extend Xapian
::Enquire
{
314 /* This returns start and end iterators
, then a typemap iterates between
315 * those and returns an array of strings in the target language.
317 std
::pair
<Xapian
::TermIterator
, Xapian
::TermIterator
>
318 get_matching_terms
(const Xapian
::MSetIterator
& item) const {
319 return std
::make_pair
($self-
>get_matching_terms_begin
(item
),
320 $self-
>get_matching_terms_end
(item
));
325 /* We don't wrap ErrorHandler
, so ignore the optional ErrorHandler parameter.
327 %ignore Enquire
(const Database
&, ErrorHandler *);
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
::clone_
;
389 %ignore Xapian
::Weight
::init_
;
390 %ignore Xapian
::Weight
::get_sumpart_needs_doclength_
;
391 %ignore Xapian
::Weight
::get_sumpart_needs_uniqueterms_
;
392 %ignore Xapian
::Weight
::get_sumpart_needs_wdf_
;
393 %ignore Xapian
::Weight
::serialise
;
394 %ignore Xapian
::Weight
::unserialise
;
395 %include
<xapian
/weight.h
>
397 /* We don't wrap Xapian's Unicode support as other languages usually already
398 * have their own Unicode support.
*/
399 /* %include
<xapian
/unicode.h
> */
401 SUBCLASSABLE
(Xapian
, Compactor
)
402 %include
<xapian
/compactor.h
>
404 SUBCLASSABLE
(Xapian
, PostingSource
)
405 // Suppress warning that Xapian
::Internal
::opt_intrusive_base is unknown.
406 %warnfilter
(SWIGWARN_TYPE_UNDEFINED_CLASS
) Xapian
::PostingSource
;
407 SUBCLASSABLE
(Xapian
, ValuePostingSource
)
408 SUBCLASSABLE
(Xapian
, ValueWeightPostingSource
)
409 %ignore Xapian
::PostingSource
::register_matcher_
;
410 %ignore Xapian
::PostingSource
::unserialise_with_registry
;
411 %include
<xapian
/postingsource.h
>
413 // Suppress warning that Xapian
::Internal
::intrusive_base is unknown.
414 %warnfilter
(SWIGWARN_TYPE_UNDEFINED_CLASS
) Xapian
::MatchSpy
;
415 SUBCLASSABLE
(Xapian
, MatchSpy
)
416 %ignore Xapian
::MatchSpy
::serialise_results
;
417 %include
<xapian
/matchspy.h
>
419 SUBCLASSABLE
(Xapian
, LatLongMetric
)
420 INPUT_ITERATOR_METHODS
(Xapian
, LatLongCoordsIterator
, LatLongCoord
, get_coord
)
421 %ignore Xapian
::LatLongCoord
::operator
<;
422 %include
<xapian
/geospatial.h
>
424 STANDARD_IGNORES
(Xapian
, Database
)
425 STANDARD_IGNORES
(Xapian
, WritableDatabase
)
426 %ignore Xapian
::WritableDatabase
::WritableDatabase
(Database
::Internal
*);
427 %ignore Xapian
::Database
::get_document_lazily_
;
428 %ignore Xapian
::Database
::check
(const std
::string
&, int, std::ostream *);
429 %ignore Xapian
::Database
::check
(int fd
, int
, std
::ostream
*);
430 %include
<xapian
/database.h
>
431 %extend Xapian
::Database
{
432 static size_t check
(const std
::string
&path, int opts = 0) {
433 return Xapian
::Database
::check
(path
, opts
, opts ?
&std::cout : NULL);
437 #if defined SWIGCSHARP || defined SWIGJAVA
439 /* xapian
/dbfactory.h is currently wrapped via fake class declarations in
440 * fake_dbfactory.i for C# and Java.
*/
444 #ifdef XAPIAN_BINDINGS_SKIP_DEPRECATED_DB_FACTORIES
445 %ignore Xapian
::InMemory
::open
;
446 %ignore Xapian
::Chert
::open
;
447 %ignore Xapian
::Auto
::open_stub
;
450 %rename
("inmemory_open") Xapian
::InMemory
::open
;
452 /* SWIG Tcl wrappers don't call destructors for classes returned by factory
453 * functions
, so we don't wrap them so users are forced to use the
454 * WritableDatabase ctor instead.
*/
456 %ignore Xapian
::Chert
::open
(const std
::string
&dir, int action, int block_size = 8192);
459 %rename
("chert_open") Xapian
::Chert
::open
;
462 /* PHP renames this to auto_open_stub
() in php
/php.i.
*/
463 %rename
("open_stub") Xapian
::Auto
::open_stub
;
468 %rename
("remote_open") Xapian
::Remote
::open
;
469 %rename
("remote_open_writable") Xapian
::Remote
::open_writable
;
471 %include
<xapian
/dbfactory.h
>