[Xapian-discuss] Perl XS bindings, postlist_begin
Olly Betts
olly@survex.com
Fri, 28 May 2004 01:20:31 +0100
--rwEMma7ioTxnRzrJ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Fri, May 28, 2004 at 12:46:26AM +0100, Francis Irving wrote:
> I'm doing some incremental indexing (using Perl) and want to check for
> existing documents so I can replace them. Looking at Omega's source
> code, it uses Xapian::Document::postlist_begin and postlist_end to do
> this.
Wrong class - postlist_begin is a method of Xapian::Database, not
Xapian::Document. But from what you say below, that's just a mistake
in this message.
> In Perl I can't work out how to call this function. From the Xapian.c
> file in the XS bindings, the function seems to be called values_begin
> rather than postlist_begin (I've tried both).
No, values_begin() returns a Xapian::ValueIterator, and it's a method of
Xapian::Document anyway.
But it looks like postlist_begin() isn't wrapped yet. Since
PostingIterator is now wrapped (as of 0.8.0.2) that's easy - patch
attached. I've not tested this beyond it compiling, but it's pretty
trivial (famous last words...)
There's also a bonus patch hunk to fix a warning from GCC 3.3 (mostly
for Alex's benefit).
Cheers,
Olly
--rwEMma7ioTxnRzrJ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="Search-Xapian-0.8.0.2.patch"
diff -ru Search-Xapian-0.8.0.2-orig/XS/Database.xs Search-Xapian-0.8.0.2/XS/Database.xs
--- Search-Xapian-0.8.0.2-orig/XS/Database.xs 2004-05-13 11:06:40.000000000 +0100
+++ Search-Xapian-0.8.0.2/XS/Database.xs 2004-05-28 01:13:41.000000000 +0100
@@ -114,6 +114,34 @@
OUTPUT:
RETVAL
+PostingIterator *
+Database::postlist_begin(term)
+ string term
+ CODE:
+ RETVAL = new PostingIterator();
+ try {
+ *RETVAL = THIS->postlist_begin(term);
+ }
+ catch (const Error &error) {
+ croak( "Exception: %s", error.get_msg().c_str() );
+ }
+ OUTPUT:
+ RETVAL
+
+PostingIterator *
+Database::postlist_end(term)
+ string term
+ CODE:
+ RETVAL = new PostingIterator();
+ try {
+ *RETVAL = THIS->postlist_end(term);
+ }
+ catch (const Error &error) {
+ croak( "Exception: %s", error.get_msg().c_str() );
+ }
+ OUTPUT:
+ RETVAL
+
doccount
Database::get_doccount()
CODE:
diff -ru Search-Xapian-0.8.0.2-orig/Xapian.xs Search-Xapian-0.8.0.2/Xapian.xs
--- Search-Xapian-0.8.0.2-orig/Xapian.xs 2004-05-13 17:32:53.000000000 +0100
+++ Search-Xapian-0.8.0.2/Xapian.xs 2004-05-28 01:13:48.000000000 +0100
@@ -1,6 +1,6 @@
#include <xapian.h>
-#include <string.h>
-#include <vector.h>
+#include <string>
+#include <vector>
#ifdef __cplusplus
extern "C" {
--rwEMma7ioTxnRzrJ--