summaryrefslogtreecommitdiff
path: root/xapian-headers.i
diff options
context:
space:
mode:
Diffstat (limited to 'xapian-headers.i')
-rw-r--r--xapian-headers.i471
1 files changed, 471 insertions, 0 deletions
diff --git a/xapian-headers.i b/xapian-headers.i
new file mode 100644
index 0000000..4b393a1
--- /dev/null
+++ b/xapian-headers.i
@@ -0,0 +1,471 @@
+%{
+/* xapian-headers.i: Getting SWIG to parse Xapian's C++ headers.
+ *
+ * Copyright 2004,2006,2011,2012,2013,2014,2015,2016,2019 Olly Betts
+ * Copyright 2014 Assem Chelli
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+ * USA
+ */
+%}
+
+/* Ignore these functions: */
+%ignore Xapian::iterator_rewind;
+%ignore Xapian::iterator_valid;
+
+/* Ignore anything ending in an underscore, which is for internal use only: */
+%rename("$ignore", regexmatch$name="_$") "";
+
+/* A class which can usefully be subclassed in the target language. */
+%define SUBCLASSABLE(NS, CLASS)
+ %ignore NS::CLASS::clone;
+ %ignore NS::CLASS::serialise;
+ %ignore NS::CLASS::unserialise;
+ %#ifdef XAPIAN_SWIG_DIRECTORS
+ %feature(director) NS::CLASS;
+ %#endif
+%enddef
+
+/* A class which is only useful to wrap if the target language allows
+ * subclassing of wrapped classes (what SWIG calls "director support").
+ */
+#ifdef XAPIAN_SWIG_DIRECTORS
+#define SUBCLASSABLE_ONLY(NS, CLASS) SUBCLASSABLE(NS, CLASS)
+#else
+#define SUBCLASSABLE_ONLY(NS, CLASS) %ignore NS::CLASS;
+#endif
+
+#ifdef SWIGTCL
+/* Tcl needs copy constructors it seems. */
+%define STANDARD_IGNORES(NS, CLASS)
+ %ignore NS::CLASS::internal;
+ %ignore NS::CLASS::CLASS(Internal*);
+ %ignore NS::CLASS::CLASS(Internal&);
+ %ignore NS::CLASS::operator=;
+%enddef
+#else
+%define STANDARD_IGNORES(NS, CLASS)
+ %ignore NS::CLASS::internal;
+ %ignore NS::CLASS::CLASS(Internal*);
+ %ignore NS::CLASS::CLASS(Internal&);
+ %ignore NS::CLASS::operator=;
+ %ignore NS::CLASS::CLASS(const CLASS &);
+%enddef
+#endif
+
+#ifdef SWIGCSHARP
+/* In C#, next and prev return the iterator object. */
+#define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) NS::CLASS METHOD() { return OP(*self); }
+#elif defined SWIGJAVA
+/* In Java, next and prev return the result of dereferencing the iterator. */
+#define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) RET_TYPE METHOD() { return *(OP(*self)); }
+#else
+/* Otherwise, next and prev return void. */
+#define INC_OR_DEC(METHOD, OP, NS, CLASS, RET_TYPE) void METHOD() { OP(*self); }
+#endif
+
+/* For other languages, SWIG already renames operator() suitably. */
+#if defined SWIGGUILE || defined SWIGJAVA || defined SWIGPHP || defined SWIGTCL
+%rename(apply) *::operator();
+#elif defined SWIGCSHARP
+%rename(Apply) *::operator();
+#endif
+
+/* We use %ignore and %extend rather than %rename on operator* so that any
+ * pattern rename used to match local naming conventions applies to
+ * DEREF_METHOD.
+ */
+%define INPUT_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
+ STANDARD_IGNORES(NS, CLASS)
+ %ignore NS::CLASS::operator++;
+ %ignore NS::CLASS::operator*;
+ %extend NS::CLASS {
+ bool equals(const NS::CLASS & o) const { return *self == o; }
+ RET_TYPE DEREF_METHOD() const { return **self; }
+ INC_OR_DEC(next, ++, NS, CLASS, RET_TYPE)
+ }
+%enddef
+
+%define RANDOM_ACCESS_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
+ INPUT_ITERATOR_METHODS(NS, CLASS, RET_TYPE, DEREF_METHOD)
+ %ignore NS::CLASS::operator--;
+ %ignore NS::CLASS::operator+=;
+ %ignore NS::CLASS::operator-=;
+ %ignore NS::CLASS::operator+;
+ %ignore NS::CLASS::operator-;
+ %extend NS::CLASS {
+ INC_OR_DEC(prev, --, NS, CLASS, RET_TYPE)
+ }
+%enddef
+
+%define CONSTANT(TYPE, NS, NAME)
+ %ignore NS::NAME;
+ %constant TYPE NAME = NS::NAME;
+%enddef
+
+/* Ignore these for all classes: */
+%ignore operator==;
+%ignore operator!=;
+%ignore operator<;
+%ignore operator>;
+%ignore operator<=;
+%ignore operator>=;
+%ignore operator+;
+%ignore difference_type;
+%ignore iterator_category;
+%ignore value_type;
+%ignore max_size;
+%ignore swap;
+%ignore iterator;
+%ignore const_iterator;
+%ignore size_type;
+%ignore unserialise(const char **, const char *);
+%ignore release();
+
+/* These methods won't throw exceptions. */
+%exception Xapian::major_version "$action"
+%exception Xapian::minor_version "$action"
+%exception Xapian::revision "$action"
+%exception Xapian::version_string "$action"
+// For XAPIAN_DOCID_BASE_TYPE and XAPIAN_TERMCOUNT_BASE_TYPE:
+%import <xapian/version.h>
+%include <xapian.h>
+
+// Disable errors about not including headers individually.
+#define XAPIAN_IN_XAPIAN_H
+
+/* We don't wrap the version macros - they're useful for compile time checks
+ * in C++ code, but for a scripting language, the version functions tell us
+ * the version of Xapian we're actually using, which is more interesting than
+ * the one the bindings were built against.
+ */
+/* %include <xapian/version.h> */
+
+CONSTANT(Xapian::valueno, Xapian, BAD_VALUENO);
+
+/* Types are needed by most of the other headers. */
+%include <xapian/types.h>
+
+CONSTANT(int, Xapian, DB_CREATE);
+CONSTANT(int, Xapian, DB_CREATE_OR_OPEN);
+CONSTANT(int, Xapian, DB_CREATE_OR_OVERWRITE);
+CONSTANT(int, Xapian, DB_OPEN);
+CONSTANT(int, Xapian, DB_NO_SYNC);
+CONSTANT(int, Xapian, DB_FULL_SYNC);
+CONSTANT(int, Xapian, DB_DANGEROUS);
+CONSTANT(int, Xapian, DB_NO_TERMLIST);
+CONSTANT(int, Xapian, DB_BACKEND_CHERT);
+CONSTANT(int, Xapian, DB_BACKEND_GLASS);
+CONSTANT(int, Xapian, DB_BACKEND_INMEMORY);
+CONSTANT(int, Xapian, DB_BACKEND_STUB);
+CONSTANT(int, Xapian, DB_RETRY_LOCK);
+CONSTANT(int, Xapian, DBCHECK_SHORT_TREE);
+CONSTANT(int, Xapian, DBCHECK_FULL_TREE);
+CONSTANT(int, Xapian, DBCHECK_SHOW_FREELIST);
+CONSTANT(int, Xapian, DBCHECK_SHOW_STATS);
+CONSTANT(int, Xapian, DBCHECK_FIX);
+CONSTANT(int, Xapian, DBCOMPACT_MULTIPASS);
+CONSTANT(int, Xapian, DBCOMPACT_NO_RENUMBER);
+CONSTANT(int, Xapian, DBCOMPACT_SINGLE_FILE);
+CONSTANT(int, Xapian, DOC_ASSUME_VALID);
+%include <xapian/constants.h>
+
+/* The Error subclasses are handled separately for languages where we wrap
+ * them. */
+/* %include <xapian/error.h> */
+
+/* ErrorHandler isn't currently wrapped. */
+/* %include <xapian/errorhandler.h> */
+
+INPUT_ITERATOR_METHODS(Xapian, PositionIterator, Xapian::termpos, get_termpos)
+%include <xapian/positioniterator.h>
+
+%ignore Xapian::DocIDWrapper;
+INPUT_ITERATOR_METHODS(Xapian, PostingIterator, Xapian::docid, get_docid)
+%include <xapian/postingiterator.h>
+
+INPUT_ITERATOR_METHODS(Xapian, TermIterator, std::string, get_term)
+%include <xapian/termiterator.h>
+
+INPUT_ITERATOR_METHODS(Xapian, ValueIterator, std::string, get_value)
+%include <xapian/valueiterator.h>
+
+STANDARD_IGNORES(Xapian, Document)
+%include <xapian/document.h>
+
+STANDARD_IGNORES(Xapian, Registry)
+%include <xapian/registry.h>
+
+STANDARD_IGNORES(Xapian, Query)
+%ignore Xapian::Query::Internal;
+%ignore operator Query;
+%ignore *::operator&(const Xapian::Query &, const Xapian::InvertedQuery_ &);
+%ignore *::operator~;
+%ignore *::operator&=;
+%ignore ::operator&=;
+%ignore *::operator|=;
+%ignore *::operator^=;
+%ignore *::operator*=;
+%ignore *::operator/=;
+#if defined SWIGCSHARP || defined SWIGGUILE || defined SWIGJAVA || defined SWIGLUA || defined SWIGPHP
+%ignore *::operator&;
+%ignore *::operator|;
+%ignore *::operator^;
+%ignore *::operator*;
+%ignore *::operator/;
+#endif
+%ignore Xapian::Query::LEAF_TERM;
+%ignore Xapian::Query::LEAF_POSTING_SOURCE;
+%ignore Xapian::Query::LEAF_MATCH_ALL;
+%ignore Xapian::Query::LEAF_MATCH_NOTHING;
+
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::Query::Internal;
+#if defined SWIGCSHARP || defined SWIGJAVA || defined SWIGPERL || \
+ defined SWIGPYTHON || defined SWIGRUBY
+// C#, Java, Perl, Python and Ruby wrap these "by hand" to give a nicer API
+// than SWIG gives by default.
+%ignore Xapian::Query::MatchAll;
+%ignore Xapian::Query::MatchNothing;
+#endif
+#ifndef XAPIAN_MIXED_SUBQUERIES_BY_ITERATOR_TYPEMAP
+%ignore Query(op op_, XapianSWIGQueryItor qbegin, XapianSWIGQueryItor qend,
+ Xapian::termcount parameter = 0);
+#endif
+%include <xapian/query.h>
+
+// Suppress warning that Xapian::Internal::intrusive_base is unknown.
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::StemImplementation;
+SUBCLASSABLE_ONLY(Xapian, StemImplementation)
+#ifndef XAPIAN_SWIG_DIRECTORS
+%ignore Xapian::Stem::Stem(Xapian::StemImplementation *);
+#endif
+STANDARD_IGNORES(Xapian, Stem)
+%ignore Xapian::Stem::Stem();
+%include <xapian/stem.h>
+
+STANDARD_IGNORES(Xapian, TermGenerator)
+%ignore Xapian::TermGenerator::operator=;
+/* Ignore forms which use Utf8Iterator, as we don't wrap that class. */
+%ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &);
+%ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &, Xapian::termcount);
+%ignore Xapian::TermGenerator::index_text(const Xapian::Utf8Iterator &, Xapian::termcount, const std::string &);
+%ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &);
+%ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &, Xapian::termcount);
+%ignore Xapian::TermGenerator::index_text_without_positions(const Xapian::Utf8Iterator &, Xapian::termcount, const std::string &);
+%ignore Xapian::TermGenerator::TermGenerator(const TermGenerator &);
+%include <xapian/termgenerator.h>
+
+STANDARD_IGNORES(Xapian, MSet)
+#ifdef SWIGJAVA
+// For compatibility with the original JNI wrappers.
+%rename("getElement") Xapian::MSet::operator[];
+#else
+%ignore Xapian::MSet::operator[];
+#endif
+%extend Xapian::MSet {
+ Xapian::docid get_docid(Xapian::doccount i) const {
+ return *(*self)[i];
+ }
+
+ Xapian::Document get_document(Xapian::doccount i) const {
+ return (*self)[i].get_document();
+ }
+
+ Xapian::MSetIterator get_hit(Xapian::doccount i) const {
+ return (*self)[i];
+ }
+
+ int get_document_percentage(Xapian::doccount i) const {
+ return self->convert_to_percent((*self)[i]);
+ }
+}
+
+RANDOM_ACCESS_ITERATOR_METHODS(Xapian, MSetIterator, Xapian::docid, get_docid)
+
+%include <xapian/mset.h>
+
+STANDARD_IGNORES(Xapian, ESet)
+%ignore Xapian::ESet::operator[];
+
+RANDOM_ACCESS_ITERATOR_METHODS(Xapian, ESetIterator, std::string, get_term)
+
+%include <xapian/eset.h>
+
+STANDARD_IGNORES(Xapian, RSet)
+
+STANDARD_IGNORES(Xapian, Enquire)
+
+SUBCLASSABLE(Xapian, MatchDecider)
+
+#ifdef XAPIAN_TERMITERATOR_PAIR_OUTPUT_TYPEMAP
+/* Instantiating the template we're going to use avoids SWIG wrapping uses
+ * of it in SwigValueWrapper.
+ */
+%template() std::pair<Xapian::TermIterator, Xapian::TermIterator>;
+
+%extend Xapian::Enquire {
+ /* This returns start and end iterators, then a typemap iterates between
+ * those and returns an array of strings in the target language.
+ */
+ std::pair<Xapian::TermIterator, Xapian::TermIterator>
+ get_matching_terms(const Xapian::MSetIterator & item) const {
+ return std::make_pair($self->get_matching_terms_begin(item),
+ $self->get_matching_terms_end(item));
+ }
+}
+#endif
+
+/* We don't wrap ErrorHandler, so ignore the optional ErrorHandler parameter.
+ */
+%ignore Enquire(const Database &, ErrorHandler *);
+
+%include <xapian/enquire.h>
+
+SUBCLASSABLE(Xapian, ExpandDecider)
+// Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::ExpandDecider;
+%ignore Xapian::ExpandDeciderAnd::ExpandDeciderAnd(const ExpandDecider *, const ExpandDecider *);
+/* FIXME: %extend ExpandDeciderFilterTerms so it can be constructed from an
+ * array of strings (or whatever the equivalent is in the target language).
+ */
+%ignore Xapian::ExpandDeciderFilterTerms;
+%include <xapian/expanddecider.h>
+
+SUBCLASSABLE(Xapian, KeyMaker)
+// Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::KeyMaker;
+%include <xapian/keymaker.h>
+
+%extend Xapian::SimpleStopper {
+ /** Load stop words from a text file (one word per line). */
+ SimpleStopper(const std::string &file) {
+ ifstream in_file(file.c_str());
+ if (!in_file.is_open())
+ throw Xapian::InvalidArgumentError("Stopword file not found: " + file);
+ istream_iterator<std::string> in_iter(in_file);
+ istream_iterator<std::string> eof;
+ return new Xapian::SimpleStopper(in_iter, eof);
+ }
+}
+
+SUBCLASSABLE(Xapian, FieldProcessor)
+// Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::Stopper;
+SUBCLASSABLE(Xapian, RangeProcessor)
+SUBCLASSABLE(Xapian, Stopper)
+SUBCLASSABLE(Xapian, ValueRangeProcessor)
+// Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::RangeProcessor;
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::ValueRangeProcessor;
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::FieldProcessor;
+STANDARD_IGNORES(Xapian, QueryParser)
+%ignore Xapian::QueryParser::QueryParser(const QueryParser &);
+CONSTANT(int, Xapian, RP_SUFFIX);
+CONSTANT(int, Xapian, RP_REPEATED);
+CONSTANT(int, Xapian, RP_DATE_PREFER_MDY);
+%include <xapian/queryparser.h>
+
+%include <xapian/valuesetmatchdecider.h>
+
+/* Xapian::Weight isn't usefully subclassable via the bindings, as clone()
+ * needs to be implemented for it to be usable for weighting a search. But
+ * there are several supplied weighting schemes implemented in C++ which can
+ * usefully be used via the bindings so we wrap those.
+ */
+STANDARD_IGNORES(Xapian, Weight)
+/* The copy constructor isn't implemented, but is protected rather than
+ * private to work around a compiler bug, so we ignore it explicitly.
+ */
+%ignore Xapian::Weight::Weight(const Weight &);
+%ignore Xapian::Weight::clone;
+%ignore Xapian::Weight::serialise;
+%ignore Xapian::Weight::unserialise;
+%include <xapian/weight.h>
+
+/* We don't wrap Xapian's Unicode support as other languages usually already
+ * have their own Unicode support. */
+/* %include <xapian/unicode.h> */
+
+SUBCLASSABLE(Xapian, Compactor)
+%include <xapian/compactor.h>
+
+SUBCLASSABLE(Xapian, PostingSource)
+// Suppress warning that Xapian::Internal::opt_intrusive_base is unknown.
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::PostingSource;
+SUBCLASSABLE(Xapian, ValuePostingSource)
+SUBCLASSABLE(Xapian, ValueWeightPostingSource)
+%ignore Xapian::PostingSource::unserialise_with_registry;
+%include <xapian/postingsource.h>
+
+// Suppress warning that Xapian::Internal::intrusive_base is unknown.
+%warnfilter(SWIGWARN_TYPE_UNDEFINED_CLASS) Xapian::MatchSpy;
+SUBCLASSABLE(Xapian, MatchSpy)
+%ignore Xapian::MatchSpy::serialise_results;
+%include <xapian/matchspy.h>
+
+SUBCLASSABLE(Xapian, LatLongMetric)
+INPUT_ITERATOR_METHODS(Xapian, LatLongCoordsIterator, LatLongCoord, get_coord)
+%ignore Xapian::LatLongCoord::operator<;
+%include <xapian/geospatial.h>
+
+STANDARD_IGNORES(Xapian, Database)
+STANDARD_IGNORES(Xapian, WritableDatabase)
+%ignore Xapian::WritableDatabase::WritableDatabase(Database::Internal *);
+%ignore Xapian::Database::check(const std::string &, int, std::ostream *);
+%ignore Xapian::Database::check(int fd, int, std::ostream *);
+%include <xapian/database.h>
+%extend Xapian::Database {
+ static size_t check(const std::string &path, int opts = 0) {
+ return Xapian::Database::check(path, opts, opts ? &std::cout : NULL);
+ }
+}
+
+#if defined SWIGCSHARP || defined SWIGJAVA
+
+/* xapian/dbfactory.h is currently wrapped via fake class declarations in
+ * fake_dbfactory.i for C# and Java. */
+
+#else
+
+#ifdef XAPIAN_BINDINGS_SKIP_DEPRECATED_DB_FACTORIES
+%ignore Xapian::InMemory::open;
+%ignore Xapian::Chert::open;
+%ignore Xapian::Auto::open_stub;
+#else
+
+%rename("inmemory_open") Xapian::InMemory::open;
+
+/* SWIG Tcl wrappers don't call destructors for classes returned by factory
+ * functions, so we don't wrap them so users are forced to use the
+ * WritableDatabase ctor instead. */
+#ifdef SWIGTCL
+%ignore Xapian::Chert::open(const std::string &dir, int action, int block_size = 8192);
+#endif
+
+%rename("chert_open") Xapian::Chert::open;
+
+#ifndef SWIGPHP
+/* PHP renames this to auto_open_stub() in php/php.i. */
+%rename("open_stub") Xapian::Auto::open_stub;
+#endif
+
+#endif
+
+%rename("remote_open") Xapian::Remote::open;
+%rename("remote_open_writable") Xapian::Remote::open_writable;
+
+%include <xapian/dbfactory.h>
+
+#endif