[Groonga-commit] groonga/groonga [master] tokenizer uvector: use grn_tokenizer_token

Back to archive index

Kouhei Sutou null+****@clear*****
Fri Dec 21 17:46:36 JST 2012


Kouhei Sutou	2012-12-21 17:46:36 +0900 (Fri, 21 Dec 2012)

  New Revision: ec195ab0ade07f438f17e51eca71dca5a0c6693e
  https://github.com/groonga/groonga/commit/ec195ab0ade07f438f17e51eca71dca5a0c6693e

  Log:
    tokenizer uvector: use grn_tokenizer_token

  Modified files:
    lib/token.c

  Modified: lib/token.c (+17 -12)
===================================================================
--- lib/token.c    2012-12-21 17:38:39 +0900 (4a882d7)
+++ lib/token.c    2012-12-21 17:46:36 +0900 (2b352e7)
@@ -33,8 +33,6 @@ typedef struct {
   byte *curr;
   byte *tail;
   uint32_t unit;
-  grn_obj curr_;
-  grn_obj stat_;
 } grn_uvector_tokenizer;
 
 static grn_obj *
@@ -53,11 +51,11 @@ uvector_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
     return NULL;
   }
   user_data->ptr = tokenizer;
+
+  grn_tokenizer_token_init(ctx, &(tokenizer->token));
   tokenizer->curr = GRN_TEXT_VALUE(str);
   tokenizer->tail = tokenizer->curr + GRN_TEXT_LEN(str);
   tokenizer->unit = sizeof(grn_id);
-  GRN_TEXT_INIT(&tokenizer->curr_, GRN_OBJ_DO_SHALLOW_COPY);
-  GRN_UINT32_INIT(&tokenizer->stat_, 0);
   return NULL;
 }
 
@@ -67,23 +65,30 @@ uvector_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
   grn_uvector_tokenizer *tokenizer = user_data->ptr;
   byte *p = tokenizer->curr + tokenizer->unit;
   if (tokenizer->tail < p) {
-    GRN_TEXT_SET_REF(&tokenizer->curr_, tokenizer->curr, 0);
-    GRN_UINT32_SET(ctx, &tokenizer->stat_, GRN_TOKENIZER_TOKEN_LAST);
+    grn_tokenizer_token_push(ctx, &(tokenizer->token),
+                             tokenizer->curr, 0,
+                             GRN_TOKENIZER_TOKEN_LAST);
   } else {
-    GRN_TEXT_SET_REF(&tokenizer->curr_, tokenizer->curr, tokenizer->unit);
+    grn_tokenizer_status status;
+    if (tokenizer->tail == p) {
+      status = GRN_TOKENIZER_TOKEN_LAST;
+    } else {
+      status = GRN_TOKENIZER_TOKEN_CONTINUE;
+    }
+    grn_tokenizer_token_push(ctx, &(tokenizer->token),
+                             tokenizer->curr, tokenizer->unit,
+                             status);
     tokenizer->curr = p;
-    GRN_UINT32_SET(ctx, &tokenizer->stat_,
-                   tokenizer->tail == p ? GRN_TOKENIZER_TOKEN_LAST : 0);
   }
-  grn_ctx_push(ctx, &tokenizer->curr_);
-  grn_ctx_push(ctx, &tokenizer->stat_);
   return NULL;
 }
 
 static grn_obj *
 uvector_fin(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
 {
-  GRN_FREE(user_data->ptr);
+  grn_uvector_tokenizer *tokenizer = user_data->ptr;
+  grn_tokenizer_token_fin(ctx, &(tokenizer->token));
+  GRN_FREE(tokenizer);
   return NULL;
 }
 
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index