Author: rooneg
Date: Sat Mar 19 19:48:55 2005
New Revision: 158291

URL: http://svn.apache.org/viewcvs?view=rev&rev=158291
Log:
Add a callback to the query object for creating weights.  This will
be useful later when the various weights do different things.

* src/search/query.c
  (query_weight_internal_t): new typedef.
  (lcn_query_t): add new callback.
  (lcn_weight_t): move further up in the file so that it preceeds new
   code that depends on it.
  (term_weight_internal,
   boolean_weight_internal): new callbacks.
  (lcn_term_query_create,
   lcn_boolean_query_create): init weight_internal callback.

Modified:
    incubator/lucene4c/trunk/src/search/query.c

Modified: incubator/lucene4c/trunk/src/search/query.c
URL: 
http://svn.apache.org/viewcvs/incubator/lucene4c/trunk/src/search/query.c?view=diff&r1=158290&r2=158291
==============================================================================
--- incubator/lucene4c/trunk/src/search/query.c (original)
+++ incubator/lucene4c/trunk/src/search/query.c Sat Mar 19 19:48:55 2005
@@ -26,11 +26,23 @@
                                                   lcn_index_t *index,
                                                   apr_pool_t *pool);
 
+typedef lcn_error_t * (*query_weight_internal_t) (lcn_weight_t **weight,
+                                                  lcn_query_t *query,
+                                                  apr_pool_t *pool);
+
 struct lcn_query_t {
   query_type_t type;
 
   query_scorer_internal_t scorer_internal;
 
+  query_weight_internal_t weight_internal;
+
+  void *baton;
+};
+
+struct lcn_weight_t {
+  lcn_query_t *query;
+
   void *baton;
 };
 
@@ -50,6 +62,20 @@
   return LCN_NO_ERROR;
 }
 
+static lcn_error_t *
+term_weight_internal (lcn_weight_t **weight,
+                      lcn_query_t *query,
+                      apr_pool_t *pool)
+{
+  lcn_weight_t *w = apr_pcalloc (pool, sizeof (*w));
+
+  w->query = query;
+
+  *weight = w;
+
+  return LCN_NO_ERROR;
+}
+
 lcn_error_t *
 lcn_term_query_create (lcn_query_t **q,
                        lcn_term_t *t,
@@ -59,6 +85,7 @@
 
   (*q)->type = TERM_QUERY;
   (*q)->scorer_internal = term_scorer_internal;
+  (*q)->weight_internal = term_weight_internal;
   (*q)->baton = t;
 
   return LCN_NO_ERROR;
@@ -88,6 +115,20 @@
   return LCN_NO_ERROR;
 }
 
+static lcn_error_t *
+boolean_weight_internal (lcn_weight_t **weight,
+                         lcn_query_t *query,
+                         apr_pool_t *pool)
+{
+  lcn_weight_t *w = apr_pcalloc (pool, sizeof (*w));
+
+  w->query = query;
+
+  *weight = w;
+
+  return LCN_NO_ERROR;
+}
+
 lcn_error_t *
 lcn_boolean_query_create (lcn_query_t **q, apr_pool_t *pool)
 {
@@ -101,6 +142,7 @@
 
   (*q)->type = BOOLEAN_QUERY;
   (*q)->scorer_internal = boolean_scorer_internal;
+  (*q)->weight_internal = boolean_weight_internal;
   (*q)->baton = bqb;
  
   return LCN_NO_ERROR;
@@ -139,12 +181,6 @@
   return LCN_NO_ERROR;
 }
 
-struct lcn_weight_t {
-  lcn_query_t *query;
-
-  void *baton;
-};
-
 lcn_query_t *
 lcn_weight_query (lcn_weight_t *weight)
 {
@@ -154,13 +190,7 @@
 lcn_error_t *
 lcn_query_weight (lcn_weight_t **weight, lcn_query_t *query, apr_pool_t *pool)
 {
-  lcn_weight_t *w = apr_pcalloc (pool, sizeof (*w));
-
-  w->query = query;
-
-  *weight = w;
-
-  return LCN_NO_ERROR;
+  return query->weight_internal (weight, query, pool);
 }
 
 lcn_error_t *


Reply via email to