aboutsummaryrefslogtreecommitdiff
path: root/xapian.i.in
diff options
context:
space:
mode:
Diffstat (limited to 'xapian.i.in')
-rw-r--r--xapian.i.in67
1 files changed, 66 insertions, 1 deletions
diff --git a/xapian.i.in b/xapian.i.in
index ff4ce80..84695e9 100644
--- a/xapian.i.in
+++ b/xapian.i.in
@@ -1,5 +1,5 @@
/* guile-xapian --- Guile bindings for Xapian
- * Copyright © 2020, 2023 Arun Isaac <arunisaac@systemreboot.net>
+ * Copyright © 2020, 2023–2024 Arun Isaac <arunisaac@systemreboot.net>
* Copyright © 2021, 2022 Bob131 <bob@bob131.so>
*
* This file is part of guile-xapian.
@@ -141,3 +141,68 @@
return new Xapian::Query (op_, slot, range_lower, range_upper);
}
}
+
+// Child class of Xapian::RangeProcessor that calls back to a
+// user-specified Scheme procedure to process fields.
+%{
+ class GuileXapianRangeProcessorWrapper
+ : public Xapian::RangeProcessor {
+ private:
+ SCM proc;
+ public:
+ GuileXapianRangeProcessorWrapper(Xapian::valueno slot, const std::string &str, unsigned flags, SCM _proc)
+ : Xapian::RangeProcessor(slot, str, flags) {
+ proc = _proc;
+ }
+ Xapian::Query operator()(const std::string &begin, const std::string &end) {
+ void *ptr;
+ int res = SWIG_ConvertPtr(scm_call_2(proc,
+ begin.empty() ? SCM_BOOL_F : scm_from_utf8_string(begin.c_str()),
+ end.empty() ? SCM_BOOL_F : scm_from_utf8_string(end.c_str())),
+ &ptr,
+ SWIGTYPE_p_Xapian__Query,
+ 0);
+ return *((Xapian::Query*)ptr);
+ }
+ };
+%}
+
+class GuileXapianRangeProcessorWrapper
+: public Xapian::RangeProcessor
+{
+ public:
+ GuileXapianRangeProcessorWrapper(Xapian::valueno, std::string const&, unsigned, SCM);
+ ~GuileXapianRangeProcessorWrapper();
+ Xapian::Query operator()(std::string const&, std::string const&);
+};
+
+// Child class of Xapian::FieldProcessor that calls back to a
+// user-specified Scheme procedure to process fields.
+%{
+ class GuileXapianFieldProcessorWrapper
+ : public Xapian::FieldProcessor {
+ private:
+ SCM proc;
+ public:
+ GuileXapianFieldProcessorWrapper(SCM _proc) {
+ proc = _proc;
+ }
+ Xapian::Query operator()(const std::string &str) {
+ void *ptr;
+ int res = SWIG_ConvertPtr(scm_call_1(proc, scm_from_utf8_string(str.c_str())),
+ &ptr,
+ SWIGTYPE_p_Xapian__Query,
+ 0);
+ return *((Xapian::Query*)ptr);
+ }
+ };
+%}
+
+class GuileXapianFieldProcessorWrapper
+: public Xapian::FieldProcessor
+{
+ public:
+ GuileXapianFieldProcessorWrapper(SCM);
+ ~GuileXapianFieldProcessorWrapper();
+ Xapian::Query operator()(std::string const&);
+};