Kouhei Sutou
null+****@clear*****
Mon Oct 19 15:00:32 JST 2015
Kouhei Sutou 2015-10-19 15:00:32 +0900 (Mon, 19 Oct 2015) New Revision: 1a6d14f7e16adc033d9e94f553f2df0803ba904b https://github.com/groonga/groonga/commit/1a6d14f7e16adc033d9e94f553f2df0803ba904b Message: Unify common code Modified files: lib/db.c Modified: lib/db.c (+12 -39) =================================================================== --- lib/db.c 2015-10-19 14:54:02 +0900 (6edcbcc) +++ lib/db.c 2015-10-19 15:00:32 +0900 (7a42e0d) @@ -13387,8 +13387,9 @@ grn_db_unmap(grn_ctx *ctx, grn_obj *db) GRN_API_RETURN(ctx->rc); } -grn_rc -grn_ctx_get_all_tables(grn_ctx *ctx, grn_obj *tables_buffer) +static grn_rc +grn_ctx_get_all_objects(grn_ctx *ctx, grn_obj *objects_buffer, + grn_bool (*predicate)(grn_ctx *ctx, grn_obj *object)) { grn_obj *db; grn_table_cursor *cursor; @@ -13411,8 +13412,8 @@ grn_ctx_get_all_tables(grn_ctx *ctx, grn_obj *tables_buffer) grn_obj *object; if ((object = grn_ctx_at(ctx, id))) { - if (grn_obj_is_table(ctx, object)) { - GRN_PTR_PUT(ctx, tables_buffer, object); + if (predicate(ctx, object)) { + GRN_PTR_PUT(ctx, objects_buffer, object); } else { grn_obj_unlink(ctx, object); } @@ -13428,41 +13429,13 @@ grn_ctx_get_all_tables(grn_ctx *ctx, grn_obj *tables_buffer) } grn_rc -grn_ctx_get_all_types(grn_ctx *ctx, grn_obj *types_buffer) +grn_ctx_get_all_tables(grn_ctx *ctx, grn_obj *tables_buffer) { - grn_obj *db; - grn_table_cursor *cursor; - grn_id id; - - GRN_API_ENTER; - - db = ctx->impl->db; - if (!db) { - ERR(GRN_INVALID_ARGUMENT, "DB isn't associated"); - GRN_API_RETURN(ctx->rc); - } - - cursor = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1, 0); - if (!cursor) { - GRN_API_RETURN(ctx->rc); - } - - while ((id = grn_table_cursor_next(ctx, cursor)) != GRN_ID_NIL) { - grn_obj *object; - - if ((object = grn_ctx_at(ctx, id))) { - if (grn_obj_is_type(ctx, object)) { - GRN_PTR_PUT(ctx, types_buffer, object); - } else { - grn_obj_unlink(ctx, object); - } - } else { - if (ctx->rc != GRN_SUCCESS) { - ERRCLR(ctx); - } - } - } - grn_table_cursor_close(ctx, cursor); + return grn_ctx_get_all_objects(ctx, tables_buffer, grn_obj_is_table); +} - GRN_API_RETURN(ctx->rc); +grn_rc +grn_ctx_get_all_types(grn_ctx *ctx, grn_obj *types_buffer) +{ + return grn_ctx_get_all_objects(ctx, types_buffer, grn_obj_is_type); } -------------- next part -------------- HTML����������������������������...Download