[Groonga-commit] groonga/groonga at 1a6d14f [master] Unify common code

Back to archive index

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 



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