Kouhei Sutou 2018-11-02 17:27:07 +0900 (Fri, 02 Nov 2018) Revision: 58b4f7d8582b2d43bf7477b0987c7dc4e3027e51 https://github.com/groonga/groonga/commit/58b4f7d8582b2d43bf7477b0987c7dc4e3027e51 Message: Extract data initializaion Modified files: lib/normalizer.c Modified: lib/normalizer.c (+53 -39) =================================================================== --- lib/normalizer.c 2018-11-02 17:04:00 +0900 (bd15647b7) +++ lib/normalizer.c 2018-11-02 17:27:07 +0900 (01e72a047) @@ -584,6 +584,56 @@ typedef struct { grn_bool remove_tokenized_delimiter_p; } grn_nfkc_normalize_data; +grn_inline static void +grn_nfkc_normalize_data_init(grn_ctx *ctx, + grn_nfkc_normalize_data *data, + grn_obj *string, + grn_nfkc_normalize_options *options) +{ + memset(data, 0, sizeof(grn_nfkc_normalize_data)); + data->string = (grn_string *)string; + data->options = options; + data->size = data->string->original_length_in_bytes; + data->ds = data->size * 3; + data->remove_blank_p = (data->string->flags & GRN_STRING_REMOVE_BLANK); + data->remove_tokenized_delimiter_p = + (data->string->flags & GRN_STRING_REMOVE_TOKENIZED_DELIMITER); + if (!(data->string->normalized = GRN_MALLOC(data->ds + 1))) { + ERR(GRN_NO_MEMORY_AVAILABLE, + "[normalize][nfkc] failed to allocate normalized text space"); + return; + } + if (data->string->flags & GRN_STRING_WITH_CHECKS) { + if (!(data->string->checks = GRN_MALLOC(data->ds * sizeof(int16_t) + 1))) { + ERR(GRN_NO_MEMORY_AVAILABLE, + "[normalize][nfkc] failed to allocate checks space"); + return; + } + } + data->ch = data->string->checks; + if (data->string->flags & GRN_STRING_WITH_TYPES) { + if (!(data->string->ctypes = GRN_MALLOC(data->ds + 1))) { + ERR(GRN_NO_MEMORY_AVAILABLE, + "[normalize][nfkc] failed to allocate character types space"); + return; + } + } + data->cp = data->string->ctypes; + if (data->options->report_source_offset) { + data->string->offsets = GRN_MALLOC(sizeof(uint64_t) * (data->ds + 1)); + if (!data->string->offsets) { + ERR(GRN_NO_MEMORY_AVAILABLE, + "[normalize][nfkc] failed to allocate offsets space"); + return; + } + } + data->offsets = data->string->offsets; + data->d = (unsigned char *)(data->string->normalized); + data->de = data->d + data->ds; + data->d_ = NULL; + data->e = (unsigned char *)(data->string->original) + data->size; +} + grn_inline static const unsigned char * grn_nfkc_normalize_unify_kana(const unsigned char *utf8_char, unsigned char *unified) @@ -1017,47 +1067,11 @@ grn_nfkc_normalize(grn_ctx *ctx, { grn_nfkc_normalize_data data; - memset(&data, 0, sizeof(grn_nfkc_normalize_data)); - data.string = (grn_string *)string; - data.options = options; - data.size = data.string->original_length_in_bytes; - data.ds = data.size * 3; - data.remove_blank_p = (data.string->flags & GRN_STRING_REMOVE_BLANK); - data.remove_tokenized_delimiter_p = - (data.string->flags & GRN_STRING_REMOVE_TOKENIZED_DELIMITER); - if (!(data.string->normalized = GRN_MALLOC(data.ds + 1))) { - ERR(GRN_NO_MEMORY_AVAILABLE, - "[normalize][nfkc] failed to allocate normalized text space"); + grn_nfkc_normalize_data_init(ctx, &data, string, options); + if (ctx->rc != GRN_SUCCESS) { goto exit; } - if (data.string->flags & GRN_STRING_WITH_CHECKS) { - if (!(data.string->checks = GRN_MALLOC(data.ds * sizeof(int16_t) + 1))) { - ERR(GRN_NO_MEMORY_AVAILABLE, - "[normalize][nfkc] failed to allocate checks space"); - goto exit; - } - } - data.ch = data.string->checks; - if (data.string->flags & GRN_STRING_WITH_TYPES) { - if (!(data.string->ctypes = GRN_MALLOC(data.ds + 1))) { - ERR(GRN_NO_MEMORY_AVAILABLE, - "[normalize][nfkc] failed to allocate character types space"); - goto exit; - } - } - data.cp = data.string->ctypes; - if (data.options->report_source_offset) { - if (!(data.string->offsets = GRN_MALLOC(sizeof(uint64_t) * (data.ds + 1)))) { - ERR(GRN_NO_MEMORY_AVAILABLE, - "[normalize][nfkc] failed to allocate offsets space"); - goto exit; - } - } - data.offsets = data.string->offsets; - data.d = (unsigned char *)(data.string->normalized); - data.de = data.d + data.ds; - data.d_ = NULL; - data.e = (unsigned char *)(data.string->original) + data.size; + for (data.s = data.s_ = (unsigned char *)(data.string->original); ; data.s += data.ls) { -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20181102/81efb35b/attachment-0001.html>