susumu.yata
null+****@clear*****
Fri Jun 19 12:52:56 JST 2015
susumu.yata 2015-06-19 12:52:56 +0900 (Fri, 19 Jun 2015) New Revision: bb93bbd43a46dc10e3b33d806ed3ee187af8a8c1 https://github.com/groonga/groonga/commit/bb93bbd43a46dc10e3b33d806ed3ee187af8a8c1 Message: egn: put loops in switch-cases, not switch-cases in a loop Modified files: lib/egn.cpp Modified: lib/egn.cpp (+55 -7) =================================================================== --- lib/egn.cpp 2015-06-19 12:43:10 +0900 (28f83a0) +++ lib/egn.cpp 2015-06-19 12:52:56 +0900 (c7e7357) @@ -120,14 +120,62 @@ grn_rc TableCursor::read(Record *records, size_t size, size_t *count) { if ((!records && (size != 0)) || !count) { return GRN_INVALID_ARGUMENT; } - for (size_t i = 0; i < size; ++i) { - grn_id id = grn_table_cursor_next(ctx_, cursor_); - if (id == GRN_ID_NIL) { - *count = i; - return GRN_SUCCESS; + switch (cursor_->header.type) { + case GRN_CURSOR_TABLE_PAT_KEY: { + for (size_t i = 0; i < size; ++i) { + grn_id id = grn_pat_cursor_next( + ctx_, reinterpret_cast<grn_pat_cursor *>(cursor_)); + if (id == GRN_ID_NIL) { + *count = i; + return GRN_SUCCESS; + } + records[i].id = id; + records[i].score = default_score_; + } + break; + } + case GRN_CURSOR_TABLE_DAT_KEY: { + for (size_t i = 0; i < size; ++i) { + grn_id id = grn_dat_cursor_next( + ctx_, reinterpret_cast<grn_dat_cursor *>(cursor_)); + if (id == GRN_ID_NIL) { + *count = i; + return GRN_SUCCESS; + } + records[i].id = id; + records[i].score = default_score_; + } + break; + } + case GRN_CURSOR_TABLE_HASH_KEY: { + for (size_t i = 0; i < size; ++i) { + grn_id id = grn_hash_cursor_next( + ctx_, reinterpret_cast<grn_hash_cursor *>(cursor_)); + if (id == GRN_ID_NIL) { + *count = i; + return GRN_SUCCESS; + } + records[i].id = id; + records[i].score = default_score_; + } + break; + } + case GRN_CURSOR_TABLE_NO_KEY: { + for (size_t i = 0; i < size; ++i) { + grn_id id = grn_array_cursor_next( + ctx_, reinterpret_cast<grn_array_cursor *>(cursor_)); + if (id == GRN_ID_NIL) { + *count = i; + return GRN_SUCCESS; + } + records[i].id = id; + records[i].score = default_score_; + } + break; + } + default: { + return GRN_UNKNOWN_ERROR; } - records[i].id = id; - records[i].score = default_score_; } *count = size; return GRN_SUCCESS; -------------- next part -------------- HTML����������������������������...Download