Author: marvin
Date: Fri Jun 29 03:30:59 2012
New Revision: 1355227

URL: http://svn.apache.org/viewvc?rev=1355227&view=rev
Log:
Hide struct def of ParserElem from QueryParser.

Modified:
    lucy/trunk/core/Lucy/Search/QueryParser.c
    lucy/trunk/core/Lucy/Search/QueryParser.cfh
    lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c
    lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh

Modified: lucy/trunk/core/Lucy/Search/QueryParser.c
URL: 
http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser.c?rev=1355227&r1=1355226&r2=1355227&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser.c (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser.c Fri Jun 29 03:30:59 2012
@@ -16,7 +16,6 @@
 
 #define C_LUCY_QUERYPARSER
 #define C_LUCY_PARSERCLAUSE
-#define C_LUCY_PARSERELEM
 #define C_LUCY_VIEWCHARBUF
 #include <stdlib.h>
 #include <ctype.h>
@@ -49,7 +48,7 @@
 #define TOKEN_OR          LUCY_QPARSER_TOKEN_OR
 #define TOKEN_AND         LUCY_QPARSER_TOKEN_AND
 #define TOKEN_FIELD       LUCY_QPARSER_TOKEN_FIELD
-#define TOKEN_QUERY       LUCY_QPARSER_TOKEN_QUERY
+#define TOKEN_STRING      LUCY_QPARSER_TOKEN_STRING
 
 // Recursing helper function for Tree().
 static Query*
@@ -267,7 +266,7 @@ S_parse_flat_string(QueryParser *self, C
         }
         else if (S_consume_ascii(qstring, "+", 1)) {
             if (ViewCB_Trim_Top(qstring)) {
-                token = ParserElem_new(TOKEN_QUERY, "+", 1);
+                token = ParserElem_new(TOKEN_STRING, "+", 1);
             }
             else {
                 token = ParserElem_new(TOKEN_PLUS, NULL, 0);
@@ -275,7 +274,7 @@ S_parse_flat_string(QueryParser *self, C
         }
         else if (S_consume_ascii(qstring, "-", 1)) {
             if (ViewCB_Trim_Top(qstring)) {
-                token = ParserElem_new(TOKEN_QUERY, "-", 1);
+                token = ParserElem_new(TOKEN_STRING, "-", 1);
             }
             else {
                 token = ParserElem_new(TOKEN_MINUS, NULL, 0);
@@ -295,7 +294,7 @@ S_parse_flat_string(QueryParser *self, C
                                     ViewCB_Get_Size(temp));
         }
         else if (S_consume_non_whitespace(qstring, temp)) {
-            token = ParserElem_new(TOKEN_QUERY, (char*)ViewCB_Get_Ptr8(temp),
+            token = ParserElem_new(TOKEN_STRING, (char*)ViewCB_Get_Ptr8(temp),
                                     ViewCB_Get_Size(temp));
         }
         else {
@@ -321,7 +320,7 @@ S_splice_out_elem_type(VArray *elems, ui
     for (uint32_t i = VA_Get_Size(elems); i--;) {
         ParserElem *elem = (ParserElem*)VA_Fetch(elems, i);
         if (Obj_Is_A((Obj*)elem, PARSERELEM)) {
-            if (elem->type & mask) { VA_Excise(elems, i, 1); }
+            if (ParserElem_Get_Type(elem) & mask) { VA_Excise(elems, i, 1); }
         }
     }
 }
@@ -339,7 +338,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
     // Determine whether this subclause is bracketed by parens.
     ParserElem *maybe_open_paren = (ParserElem*)VA_Fetch(elems, 0);
     if (maybe_open_paren != NULL
-        && maybe_open_paren->type == TOKEN_OPEN_PAREN
+        && ParserElem_Get_Type(maybe_open_paren) == TOKEN_OPEN_PAREN
        ) {
         apply_parens = true;
         VA_Excise(elems, 0, 1);
@@ -347,7 +346,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
         if (num_elems) {
             ParserElem *maybe_close_paren
                 = (ParserElem*)VA_Fetch(elems, num_elems - 1);
-            if (maybe_close_paren->type == TOKEN_CLOSE_PAREN) {
+            if (ParserElem_Get_Type(maybe_close_paren) == TOKEN_CLOSE_PAREN) {
                 VA_Excise(elems, num_elems - 1, 1);
             }
         }
@@ -363,29 +362,30 @@ S_do_tree(QueryParser *self, CharBuf *qu
             // Field specifier must immediately precede any query.
             ParserElem* maybe_field_elem
                 = (ParserElem*)VA_Fetch(elems, i - 1);
-            if (maybe_field_elem->type == TOKEN_FIELD) {
-                field = maybe_field_elem->text;
+            if (ParserElem_Get_Type(maybe_field_elem) == TOKEN_FIELD) {
+                field = (CharBuf*)ParserElem_As(maybe_field_elem, CHARBUF);
             }
         }
 
-        if (elem->type == TOKEN_QUERY) {
+        if (ParserElem_Get_Type(elem) == TOKEN_STRING) {
             // Generate a LeafQuery from a Phrase.
-            if (CB_Starts_With(elem->text, self->phrase_label)) {
+            const CharBuf *text = (CharBuf*)ParserElem_As(elem, CHARBUF);
+            if (CB_Starts_With(text, self->phrase_label)) {
                 CharBuf *inner_text
-                    = (CharBuf*)Hash_Fetch(extractions, (Obj*)elem->text);
+                    = (CharBuf*)Hash_Fetch(extractions, (Obj*)text);
                 Query *query = (Query*)LeafQuery_new(field, inner_text);
                 ParserClause *clause = ParserClause_new(query, default_occur);
-                DECREF(Hash_Delete(extractions, (Obj*)elem->text));
+                DECREF(Hash_Delete(extractions, (Obj*)text));
                 VA_Store(elems, i, (Obj*)clause);
                 DECREF(query);
             }
             // Recursively parse parenthetical groupings.
-            else if (CB_Starts_With(elem->text, self->bool_group_label)) {
+            else if (CB_Starts_With(text, self->bool_group_label)) {
                 CharBuf *inner_text
-                    = (CharBuf*)Hash_Fetch(extractions, (Obj*)elem->text);
+                    = (CharBuf*)Hash_Fetch(extractions, (Obj*)text);
                 Query *query
                     = S_do_tree(self, inner_text, field, extractions);
-                DECREF(Hash_Delete(extractions, (Obj*)elem->text));
+                DECREF(Hash_Delete(extractions, (Obj*)text));
                 if (query) {
                     ParserClause *clause
                         = ParserClause_new(query, default_occur);
@@ -395,14 +395,14 @@ S_do_tree(QueryParser *self, CharBuf *qu
             }
             // What's left is probably a term, so generate a LeafQuery.
             else {
-                Query *query = (Query*)LeafQuery_new(field, elem->text);
+                Query *query = (Query*)LeafQuery_new(field, text);
                 ParserClause *clause = ParserClause_new(query, default_occur);
                 VA_Store(elems, i, (Obj*)clause);
                 DECREF(query);
             }
         }
     }
-    S_splice_out_elem_type(elems, TOKEN_FIELD | TOKEN_QUERY);
+    S_splice_out_elem_type(elems, TOKEN_FIELD | TOKEN_STRING);
 
     // Apply +, -, NOT.
     for (uint32_t i = VA_Get_Size(elems); i--;) {
@@ -411,14 +411,13 @@ S_do_tree(QueryParser *self, CharBuf *qu
             for (uint32_t j = i; j--;) {
                 ParserElem *elem = (ParserElem*)VA_Fetch(elems, j);
                 if (Obj_Is_A((Obj*)elem, PARSERELEM)) {
-                    if (elem->type == TOKEN_MINUS
-                        || elem->type == TOKEN_NOT
-                       ) {
+                    uint32_t type = ParserElem_Get_Type(elem);
+                    if (type == TOKEN_MINUS || type == TOKEN_NOT) {
                         clause->occur = clause->occur == MUST_NOT
                                         ? MUST
                                         : MUST_NOT;
                     }
-                    else if (elem->type == TOKEN_PLUS) {
+                    else if (type == TOKEN_PLUS) {
                         if (clause->occur == SHOULD) {
                             clause->occur = MUST;
                         }
@@ -468,7 +467,9 @@ S_do_tree(QueryParser *self, CharBuf *qu
     // Apply AND.
     for (uint32_t i = 0; i + 2 < VA_Get_Size(elems); i++) {
         ParserElem *elem = (ParserElem*)VA_Fetch(elems, i + 1);
-        if (Obj_Is_A((Obj*)elem, PARSERELEM) && elem->type == TOKEN_AND) {
+        if (Obj_Is_A((Obj*)elem, PARSERELEM)
+            && ParserElem_Get_Type(elem) == TOKEN_AND
+           ) {
             ParserClause *preceding  = (ParserClause*)VA_Fetch(elems, i);
             VArray       *children   = VA_new(2);
             uint32_t      num_to_zap = 0;
@@ -485,7 +486,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
                 ParserClause *following
                     = (ParserClause*)VA_Fetch(elems, j + 1);
                 if (!Obj_Is_A((Obj*)maybe_and, PARSERELEM)
-                    || maybe_and->type != TOKEN_AND
+                    || ParserElem_Get_Type(maybe_and) != TOKEN_AND
                    ) {
                     break;
                 }
@@ -509,7 +510,8 @@ S_do_tree(QueryParser *self, CharBuf *qu
     // Apply OR.
     for (uint32_t i = 0; i + 2 < VA_Get_Size(elems); i++) {
         ParserElem *elem = (ParserElem*)VA_Fetch(elems, i + 1);
-        if (Obj_Is_A((Obj*)elem, PARSERELEM) && elem->type == TOKEN_OR) {
+        if (Obj_Is_A((Obj*)elem, PARSERELEM)
+            && ParserElem_Get_Type(elem) == TOKEN_OR) {
             ParserClause *preceding  = (ParserClause*)VA_Fetch(elems, i);
             VArray       *children   = VA_new(2);
             uint32_t      num_to_zap = 0;
@@ -526,7 +528,7 @@ S_do_tree(QueryParser *self, CharBuf *qu
                 ParserClause *following
                     = (ParserClause*)VA_Fetch(elems, j + 1);
                 if (!Obj_Is_A((Obj*)maybe_or, PARSERELEM)
-                    || maybe_or->type != TOKEN_OR
+                    || ParserElem_Get_Type(maybe_or) != TOKEN_OR
                    ) {
                     break;
                 }

Modified: lucy/trunk/core/Lucy/Search/QueryParser.cfh
URL: 
http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser.cfh?rev=1355227&r1=1355226&r2=1355227&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser.cfh (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser.cfh Fri Jun 29 03:30:59 2012
@@ -257,7 +257,7 @@ __C__
 #define LUCY_QPARSER_TOKEN_OR          0x00000100
 #define LUCY_QPARSER_TOKEN_AND         0x00000200
 #define LUCY_QPARSER_TOKEN_FIELD       0x00000400
-#define LUCY_QPARSER_TOKEN_QUERY       0x00000800
+#define LUCY_QPARSER_TOKEN_STRING      0x00000800
 
 __END_C__
 

Modified: lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c
URL: 
http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c?rev=1355227&r1=1355226&r2=1355227&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.c Fri Jun 29 03:30:59 
2012
@@ -27,15 +27,27 @@ ParserElem_new(uint32_t type, const char
 ParserElem*
 ParserElem_init(ParserElem *self, uint32_t type, const char *text,
                  size_t len) {
-    self->type = type;
-    self->text = text ? CB_new_from_utf8(text, len) : NULL;
+    self->type  = type;
+    self->value = text ? (Obj*)CB_new_from_utf8(text, len) : NULL;
     return self;
 }
 
 void
 ParserElem_destroy(ParserElem *self) {
-    DECREF(self->text);
+    DECREF(self->value);
     SUPER_DESTROY(self, PARSERELEM);
 }
 
+Obj*
+ParserElem_as(ParserElem *self, VTable *metaclass) {
+    if (self->value && Obj_Is_A(self->value, metaclass)) {
+        return self->value;
+    }
+    return NULL;
+}
+
+uint32_t
+ParserElem_get_type(ParserElem *self) {
+    return self->type;
+}
 

Modified: lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh
URL: 
http://svn.apache.org/viewvc/lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh?rev=1355227&r1=1355226&r2=1355227&view=diff
==============================================================================
--- lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh (original)
+++ lucy/trunk/core/Lucy/Search/QueryParser/ParserElem.cfh Fri Jun 29 03:30:59 
2012
@@ -20,8 +20,8 @@ parcel Lucy;
  */
 class Lucy::QueryParser::ParserElem inherits Lucy::Object::Obj {
 
-    uint32_t type;
-    CharBuf *text;
+    uint32_t  type;
+    Obj      *value;
 
     inert incremented ParserElem*
     new(uint32_t type, const char *text = NULL, size_t len = 0);
@@ -32,5 +32,14 @@ class Lucy::QueryParser::ParserElem inhe
 
     public void
     Destroy(ParserElem *self);
+
+    /** Return the value of the elem if it matches the specification, NULL
+     * otherwise.
+     */
+    nullable Obj*
+    As(ParserElem *self, VTable *metaclass);
+
+    uint32_t
+    Get_Type(ParserElem *self);
 }
 


Reply via email to