You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2012/07/02 04:53:18 UTC
[lucy-commits] svn commit: r1356059 - in /lucy/trunk:
core/Lucy/Search/QueryParser/ParserElem.cfh
perl/buildlib/Lucy/Build/Binding/Search.pm
Author: marvin
Date: Mon Jul 2 02:53:18 2012
New Revision: 1356059
URL: http://svn.apache.org/viewvc?rev=1356059&view=rev
Log:
Add XS bindings for ParserElem, QueryLexer.
Modified:
lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh
lucy/trunk/perl/buildlib/Lucy/Build/Binding/Search.pm
Modified: lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh
URL: http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh?rev=1356059&r1=1356058&r2=1356059&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh Mon Jul 2 02:53:18 2012
@@ -18,7 +18,7 @@ parcel Lucy;
/** Private utility class.
*/
-class Lucy::QueryParser::ParserElem inherits Lucy::Object::Obj {
+class Lucy::Search::QueryParser::ParserElem inherits Lucy::Object::Obj {
uint32_t type;
uint32_t occur;
Modified: lucy/trunk/perl/buildlib/Lucy/Build/Binding/Search.pm
URL: http://svn.apache.org/viewvc/lucy/trunk/perl/buildlib/Lucy/Build/Binding/Search.pm?rev=1356059&r1=1356058&r2=1356059&view=diff
==============================================================================
--- lucy/trunk/perl/buildlib/Lucy/Build/Binding/Search.pm (original)
+++ lucy/trunk/perl/buildlib/Lucy/Build/Binding/Search.pm Mon Jul 2 02:53:18 2012
@@ -41,11 +41,13 @@ sub bind_all {
$class->bind_nomatchquery;
$class->bind_orquery;
$class->bind_orscorer;
+ $class->bind_parserelem;
$class->bind_phrasequery;
$class->bind_phrasecompiler;
$class->bind_polyquery;
$class->bind_polysearcher;
$class->bind_query;
+ $class->bind_querylexer;
$class->bind_queryparser;
$class->bind_rangequery;
$class->bind_requiredoptionalmatcher;
@@ -489,6 +491,85 @@ sub bind_orscorer {
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
+sub bind_parserelem {
+ my $xs_code = <<'END_XS_CODE';
+MODULE = Lucy PACKAGE = Lucy::Search::QueryParser::ParserElem
+
+SV*
+new(either_sv, ...)
+ SV *either_sv;
+CODE:
+{
+ SV *type_sv;
+ SV *value_sv;
+
+ chy_bool_t args_ok
+ = XSBind_allot_params(&(ST(0)), 1, items,
+ ALLOT_SV(&type_sv, "type", 4, true),
+ ALLOT_SV(&value_sv, "value", 5, false),
+ NULL);
+
+ if (!args_ok) {
+ CFISH_RETHROW(CFISH_INCREF(cfish_Err_get_error()));
+ }
+ const char *type_str = SvPVutf8_nolen(type_sv);
+ lucy_Obj *value = NULL;
+ uint32_t type = 0;
+
+ if (strcmp(type_str, "OPEN_PAREN") == 0) {
+ type = LUCY_QPARSER_TOKEN_OPEN_PAREN;
+ }
+ else if (strcmp(type_str, "CLOSE_PAREN") == 0) {
+ type = LUCY_QPARSER_TOKEN_CLOSE_PAREN;
+ }
+ else if (strcmp(type_str, "MINUS") == 0) {
+ type = LUCY_QPARSER_TOKEN_MINUS;
+ }
+ else if (strcmp(type_str, "PLUS") == 0) {
+ type = LUCY_QPARSER_TOKEN_PLUS;
+ }
+ else if (strcmp(type_str, "NOT") == 0) {
+ type = LUCY_QPARSER_TOKEN_NOT;
+ }
+ else if (strcmp(type_str, "AND") == 0) {
+ type = LUCY_QPARSER_TOKEN_AND;
+ }
+ else if (strcmp(type_str, "OR") == 0) {
+ type = LUCY_QPARSER_TOKEN_OR;
+ }
+ else if (strcmp(type_str, "FIELD") == 0) {
+ type = LUCY_QPARSER_TOKEN_FIELD;
+ value = CFISH_CERTIFY(XSBind_perl_to_cfish(value_sv), LUCY_CHARBUF);
+ }
+ else if (strcmp(type_str, "STRING") == 0) {
+ type = LUCY_QPARSER_TOKEN_STRING;
+ value = CFISH_CERTIFY(XSBind_perl_to_cfish(value_sv), LUCY_CHARBUF);
+ }
+ else if (strcmp(type_str, "QUERY") == 0) {
+ type = LUCY_QPARSER_TOKEN_QUERY;
+ value = CFISH_CERTIFY(XSBind_perl_to_cfish(value_sv), LUCY_QUERY);
+ }
+ else {
+ CFISH_THROW(CFISH_ERR, "Bad type: '%s'", type_str);
+ }
+
+ lucy_ParserElem *self = (lucy_ParserElem*)XSBind_new_blank_obj(either_sv);
+ self = lucy_ParserElem_init(self, type, value);
+ RETVAL = XSBind_cfish_to_perl((cfish_Obj*)self);
+ CFISH_DECREF(self);
+}
+OUTPUT: RETVAL
+
+END_XS_CODE
+ my $binding = Clownfish::CFC::Binding::Perl::Class->new(
+ parcel => "Lucy",
+ class_name => "Lucy::Search::QueryParser::ParserElem",
+ );
+ $binding->exclude_constructor;
+ $binding->append_xs($xs_code);
+ Clownfish::CFC::Binding::Perl::Class->register($binding);
+}
+
sub bind_phrasequery {
my @exposed = qw( Get_Field Get_Terms );
@@ -632,6 +713,14 @@ END_CONSTRUCTOR_CODE_SAMPLE
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
+sub bind_querylexer {
+ my $binding = Clownfish::CFC::Binding::Perl::Class->new(
+ parcel => "Lucy",
+ class_name => "Lucy::Search::QueryParser::QueryLexer",
+ );
+ Clownfish::CFC::Binding::Perl::Class->register($binding);
+}
+
sub bind_queryparser {
my @exposed = qw(
Parse