[Groonga-commit] groonga/groonga at da4feb8 [master] Simplify tsort API

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Apr 10 16:07:56 JST 2016


Kouhei Sutou	2016-04-10 16:07:56 +0900 (Sun, 10 Apr 2016)

  New Revision: da4feb8b952c22fc4c0928b4d6e8692f756bd1df
  https://github.com/groonga/groonga/commit/da4feb8b952c22fc4c0928b4d6e8692f756bd1df

  Message:
    Simplify tsort API

  Modified files:
    lib/proc/proc_select.c

  Modified: lib/proc/proc_select.c (+37 -26)
===================================================================
--- lib/proc/proc_select.c    2016-04-10 15:59:21 +0900 (cdd95cd)
+++ lib/proc/proc_select.c    2016-04-10 16:07:56 +0900 (caa1e4f)
@@ -453,10 +453,10 @@ typedef enum {
 } tsort_status;
 
 static grn_bool
-drilldown_info_visit(grn_ctx *ctx, grn_obj *labels,
-                     tsort_status *statuses,
-                     drilldown_info *drilldowns,
-                     uint32_t index, grn_obj *indexes)
+drilldown_info_tsort_visit(grn_ctx *ctx, grn_obj *labels,
+                           tsort_status *statuses,
+                           drilldown_info *drilldowns,
+                           uint32_t index, grn_obj *indexes)
 {
   grn_bool cycled = GRN_TRUE;
 
@@ -479,8 +479,8 @@ drilldown_info_visit(grn_ctx *ctx, grn_obj *labels,
                                      drilldown->table_name_len);
         if (dependent_id != GRN_ID_NIL) {
           uint32_t dependent_index = dependent_id - 1;
-          cycled = drilldown_info_visit(ctx, labels, statuses, drilldowns,
-                                        dependent_index, indexes);
+          cycled = drilldown_info_tsort_visit(ctx, labels, statuses, drilldowns,
+                                              dependent_index, indexes);
         }
       }
     }
@@ -495,10 +495,10 @@ drilldown_info_visit(grn_ctx *ctx, grn_obj *labels,
 }
 
 static grn_bool
-drilldown_info_tsort(grn_ctx *ctx, grn_obj *labels,
-                     tsort_status *statuses,
-                     drilldown_info *drilldowns, unsigned int n_drilldowns,
-                     grn_obj *indexes)
+drilldown_info_tsort_body(grn_ctx *ctx, grn_obj *labels,
+                          tsort_status *statuses,
+                          drilldown_info *drilldowns, unsigned int n_drilldowns,
+                          grn_obj *indexes)
 {
   grn_bool succeeded = GRN_TRUE;
   unsigned int i;
@@ -509,8 +509,8 @@ drilldown_info_tsort(grn_ctx *ctx, grn_obj *labels,
                        drilldown->label, drilldown->label_len);
     if (id != GRN_ID_NIL) {
       uint32_t index = id - 1;
-      if (drilldown_info_visit(ctx, labels, statuses, drilldowns,
-                               index, indexes)) {
+      if (drilldown_info_tsort_visit(ctx, labels, statuses, drilldowns,
+                                     index, indexes)) {
         succeeded = GRN_FALSE;
         break;
       }
@@ -539,6 +539,27 @@ drilldown_info_tsort_init(grn_ctx *ctx, grn_obj *labels,
   }
 }
 
+static grn_bool
+drilldown_info_tsort(grn_ctx *ctx, grn_obj *labels,
+                     drilldown_info *drilldowns, unsigned int n_drilldowns,
+                     grn_obj *indexes)
+{
+  tsort_status *statuses;
+  grn_bool succeeded;
+
+  statuses = GRN_PLUGIN_MALLOCN(ctx, tsort_status, n_drilldowns);
+  if (!statuses) {
+    return GRN_FALSE;
+  }
+
+  drilldown_info_tsort_init(ctx, labels, statuses, drilldowns, n_drilldowns);
+  succeeded = drilldown_info_tsort_body(ctx, labels, statuses,
+                                        drilldowns, n_drilldowns, indexes);
+  GRN_PLUGIN_FREE(ctx, statuses);
+  return succeeded;
+}
+
+
 static void
 grn_select_drilldowns(grn_ctx *ctx, grn_obj *table,
                       drilldown_info *drilldowns, unsigned int n_drilldowns,
@@ -558,20 +579,10 @@ grn_select_drilldowns(grn_ctx *ctx, grn_obj *table,
   }
 
   GRN_UINT32_INIT(&tsorted_indexes, GRN_OBJ_VECTOR);
-
-  {
-    tsort_status *statuses;
-    grn_bool succeeded;
-
-    statuses = GRN_PLUGIN_MALLOCN(ctx, tsort_status, n_drilldowns);
-    drilldown_info_tsort_init(ctx, labels, statuses, drilldowns, n_drilldowns);
-    succeeded = drilldown_info_tsort(ctx, labels, statuses,
-                                     drilldowns, n_drilldowns, &tsorted_indexes);
-    GRN_PLUGIN_FREE(ctx, statuses);
-    if (!succeeded) {
-      /* cyclic */
-      goto exit;
-    }
+  if (!drilldown_info_tsort(ctx, labels,
+                            drilldowns, n_drilldowns, &tsorted_indexes)) {
+    /* cyclic */
+    goto exit;
   }
 
   results = GRN_PLUGIN_MALLOCN(ctx, grn_table_group_result, n_drilldowns);
-------------- next part --------------
HTML����������������������������...
下載 



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