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 *