[Groonga-commit] groonga/groonga [master] suggest: allocate grn_suggest_leaner in func_suggest_preparer()

Back to archive index

null+****@clear***** null+****@clear*****
2012年 3月 12日 (月) 10:48:42 JST


Kouhei Sutou	2012-03-12 10:48:42 +0900 (Mon, 12 Mar 2012)

  New Revision: 21041f5e1fc116768851d564ba13d19e569e410e

  Log:
    suggest: allocate grn_suggest_leaner in func_suggest_preparer()

  Modified files:
    plugins/suggest/suggest.c

  Modified: plugins/suggest/suggest.c (+16 -14)
===================================================================
--- plugins/suggest/suggest.c    2012-03-12 10:21:38 +0900 (479aaf7)
+++ plugins/suggest/suggest.c    2012-03-12 10:48:42 +0900 (f66cc7e)
@@ -694,7 +694,8 @@ learn_for_suggest(grn_ctx *ctx, grn_suggest_learner *learner,
 }
 
 static int
-learn(grn_ctx *ctx, grn_obj *post_event, grn_obj *post_type, grn_obj *post_item,
+learn(grn_ctx *ctx, grn_suggest_learner *learner,
+      grn_obj *post_event, grn_obj *post_type, grn_obj *post_item,
       grn_obj *seq, grn_obj *post_time, grn_obj *pairs)
 {
   int r = 0;
@@ -705,38 +706,37 @@ learn(grn_ctx *ctx, grn_obj *post_event, grn_obj *post_type, grn_obj *post_item,
   grn_id seq_id = GRN_RECORD_VALUE(seq);
   int64_t post_time_value = GRN_TIME_VALUE(post_time);
   if (post_event_id && post_item_id && seq_id) {
-    grn_suggest_learner learner;
-    learner_init_columns(ctx, &learner, seq, post_item, pairs);
+    learner_init_columns(ctx, learner, seq, post_item, pairs);
     GRN_UINT32_INIT(&v1, 0);
     GRN_UINT32_SET(ctx, &v1, 1);
-    GRN_RECORD_INIT(&pre_events, 0, grn_obj_id(ctx, learner.events));
-    grn_obj_set_value(ctx, learner.items_freq, post_item_id,
+    GRN_RECORD_INIT(&pre_events, 0, grn_obj_id(ctx, learner->events));
+    grn_obj_set_value(ctx, learner->items_freq, post_item_id,
                       &v1, GRN_OBJ_INCR);
-    grn_obj_set_value(ctx, learner.items_last, post_item_id,
+    grn_obj_set_value(ctx, learner->items_last, post_item_id,
                       post_time, GRN_OBJ_SET);
     if (post_type_id) {
       uint64_t key_ = ((uint64_t)post_item_id) << 32;
       grn_id items_id;
       grn_obj pre_item;
-      grn_obj_set_value(ctx, learner.items_freq2, post_item_id,
+      grn_obj_set_value(ctx, learner->items_freq2, post_item_id,
                         &v1, GRN_OBJ_INCR);
-      grn_obj_get_value(ctx, learner.seqs_events, seq_id, &pre_events);
-      items_id = grn_obj_get_range(ctx, learner.events_item);
+      grn_obj_get_value(ctx, learner->seqs_events, seq_id, &pre_events);
+      items_id = grn_obj_get_range(ctx, learner->events_item);
       GRN_RECORD_INIT(&pre_item, 0, items_id);
-      r = learn_for_complete_and_correcnt(ctx, &learner,
+      r = learn_for_complete_and_correcnt(ctx, learner,
                                           post_item, &pre_events, &pre_item,
                                           key_, post_time_value, &v1);
-      learn_for_suggest(ctx, &learner,
+      learn_for_suggest(ctx, learner,
                         post_item_id, key_, &pre_item, post_item, &v1);
       GRN_OBJ_FIN(ctx, &pre_item);
       GRN_BULK_REWIND(&pre_events);
     }
     GRN_RECORD_SET(ctx, &pre_events, post_event_id);
-    grn_obj_set_value(ctx, learner.seqs_events, seq_id,
+    grn_obj_set_value(ctx, learner->seqs_events, seq_id,
                       &pre_events, GRN_OBJ_APPEND);
     GRN_OBJ_FIN(ctx, &pre_events);
     GRN_OBJ_FIN(ctx, &v1);
-    learner_fin_columns(ctx, &learner);
+    learner_fin_columns(ctx, learner);
   }
   return r;
 }
@@ -753,7 +753,9 @@ func_suggest_preparer(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *us
     grn_obj *seq = args[3];
     grn_obj *post_time = args[4];
     grn_obj *pairs = args[5];
-    r = learn(ctx, post_event, post_type, post_item, seq, post_time, pairs);
+    grn_suggest_learner learner;
+    r = learn(ctx, &learner,
+              post_event, post_type, post_item, seq, post_time, pairs);
   }
   if ((obj = GRN_PROC_ALLOC(GRN_DB_UINT32, 0))) { GRN_UINT32_SET(ctx, obj, r); }
   return obj;




Groonga-commit メーリングリストの案内
Back to archive index