null+****@clear*****
null+****@clear*****
2012年 2月 10日 (金) 16:52:40 JST
Kouhei Sutou 2012-02-10 16:52:40 +0900 (Fri, 10 Feb 2012)
New Revision: 2aa6c3365fe995e778bc9da4fe1ce74dd1febaab
Log:
[dat] migrated to grn_normalized_text from grn_str.
Modified files:
lib/dat.cpp
Modified: lib/dat.cpp (+16 -10)
===================================================================
--- lib/dat.cpp 2012-02-10 16:51:48 +0900 (12ff71b)
+++ lib/dat.cpp 2012-02-10 16:52:40 +0900 (8197a5a)
@@ -695,16 +695,19 @@ int grn_dat_scan(grn_ctx *ctx, grn_dat *dat, const char *str,
int num_scan_hits = 0;
try {
- if (dat->obj.header.flags & GRN_OBJ_KEY_NORMALIZE) {
- grn_str * const normalized_str = grn_str_open(
- ctx, str, str_size, GRN_STR_NORMALIZE | GRN_NORMALIZE_WITH_CHECKS);
- if (!normalized_str) {
- fprintf(stderr, "error: grn_str_open() failed!\n");
+ if (dat->normalizer) {
+ grn_obj * normalized_text;
+ normalized_text = grn_normalized_text_open(ctx, dat->normalizer,
+ str, str_size,
+ dat->encoding,
+ GRN_NORMALIZE_WITH_CHECKS);
+ if (!normalized_text) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[dat][scan] failed to allocate memory for normalization");
return -1;
}
- str = normalized_str->norm;
- str_size = normalized_str->norm_blen;
- const short *checks = normalized_str->checks;
+ grn_normalized_text_get_value(ctx, normalized_text, &str, NULL, &str_size);
+ const short *checks = grn_normalized_text_get_checks(ctx, normalized_text);
unsigned int offset = 0;
while (str_size) {
if (*checks) {
@@ -741,9 +744,12 @@ int grn_dat_scan(grn_ctx *ctx, grn_dat *dat, const char *str,
++checks;
}
if (str_rest) {
- *str_rest = normalized_str->orig + offset;
+ const char *original;
+ grn_normalized_text_get_original_value(ctx, normalized_text,
+ &original, NULL);
+ *str_rest = original + offset;
}
- grn_str_close(ctx, normalized_str);
+ grn_obj_unlink(ctx, normalized_text);
} else {
const char * const begin = str;
while (str_size) {