[Groonga-commit] groonga/groonga [master] inspect pat nodes.

アーカイブの一覧に戻る

null+****@clear***** null+****@clear*****
2010年 7月 22日 (木) 12:07:11 JST


Kouhei Sutou	2010-07-22 03:07:11 +0000 (Thu, 22 Jul 2010)

  New Revision: fec100cf6f063ee1a43b176adaff8d2471f99a45

  Log:
    inspect pat nodes.

  Modified files:
    lib/pat.c
    lib/pat.h
    lib/util.c

  Modified: lib/pat.c (+48 -0)
===================================================================
--- lib/pat.c    2010-07-21 09:45:42 +0000 (86c10fd)
+++ lib/pat.c    2010-07-22 03:07:11 +0000 (fddf52e)
@@ -19,6 +19,7 @@
 #include <limits.h>
 #include "pat.h"
 #include "output.h"
+#include "util.h"
 
 #define GRN_PAT_DELETED (GRN_ID_MAX + 1)
 
@@ -2186,3 +2187,50 @@ grn_pat_check(grn_ctx *ctx, grn_pat *pat)
   GRN_OUTPUT_INT64(h->n_garbages);
   GRN_OUTPUT_ARRAY_CLOSE();
 }
+
+static void
+grn_pat_inspect_node(grn_ctx *ctx, grn_pat *pat, grn_id id, int check,
+                     grn_obj *key_buf, grn_obj *buf)
+{
+  pat_node *node = NULL;
+  int key_size;
+
+  grn_text_lltoa(ctx, buf, id);
+  PAT_AT(pat, id, node);
+  key_size = PAT_LEN(node);
+  if (key_size > 1) {
+    GRN_BULK_REWIND(key_buf);
+    grn_bulk_space(ctx, key_buf, key_size);
+    grn_pat_get_key(ctx, pat, id, GRN_BULK_HEAD(key_buf), key_size);
+    GRN_TEXT_PUTS(ctx, buf, "(");
+    grn_inspect(ctx, buf, key_buf);
+    GRN_TEXT_PUTS(ctx, buf, ")");
+  }
+  GRN_TEXT_PUTS(ctx, buf, "[");
+  if (PAT_CHK(node) > check) {
+    int i;
+    for (i = 0; i < 2; i++) {
+      if (node->lr[i]) {
+        grn_pat_inspect_node(ctx, pat, node->lr[i], PAT_CHK(node), key_buf, buf);
+      } else {
+        GRN_TEXT_PUTS(ctx, buf, "nil");
+      }
+      if (i == 0) {
+        GRN_TEXT_PUTS(ctx, buf, ", ");
+      }
+    }
+  }
+  GRN_TEXT_PUTS(ctx, buf, "]");
+}
+
+void
+grn_pat_inspect_nodes(grn_ctx *ctx, grn_pat *pat, grn_obj *buf)
+{
+  pat_node *node;
+  grn_obj key_buf;
+
+  GRN_OBJ_INIT(&key_buf, GRN_BULK, 0, pat->obj.header.domain);
+  PAT_AT(pat, GRN_ID_NIL, node);
+  grn_pat_inspect_node(ctx, pat, node->lr[1], -1, &key_buf, buf);
+  GRN_OBJ_FIN(ctx, &key_buf);
+}

  Modified: lib/pat.h (+1 -0)
===================================================================
--- lib/pat.h    2010-07-21 09:45:42 +0000 (3390755)
+++ lib/pat.h    2010-07-22 03:07:11 +0000 (b98507b)
@@ -96,6 +96,7 @@ grn_id grn_pat_next(grn_ctx *ctx, grn_pat *pat, grn_id id);
 const char *grn_pat_get_value_(grn_ctx *ctx, grn_pat *pat, grn_id id, uint32_t *size);
 grn_id grn_pat_at(grn_ctx *ctx, grn_pat *pat, grn_id id);
 void grn_pat_check(grn_ctx *ctx, grn_pat *pat);
+void grn_pat_inspect_nodes(grn_ctx *ctx, grn_pat *pat, grn_obj *buf);
 
 #ifdef __cplusplus
 }

  Modified: lib/util.c (+6 -0)
===================================================================
--- lib/util.c    2010-07-21 09:45:42 +0000 (70ecd70)
+++ lib/util.c    2010-07-22 03:07:11 +0000 (5c35f17)
@@ -18,6 +18,7 @@
 #include <string.h>
 #include <stdio.h>
 #include "db.h"
+#include "pat.h"
 #include "util.h"
 
 grn_rc
@@ -377,6 +378,11 @@ grn_table_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
     GRN_TEXT_PUTS(ctx, buf, "]");
   }
 
+  if (obj->header.type == GRN_TABLE_PAT_KEY) {
+    GRN_TEXT_PUTS(ctx, buf, " nodes:");
+    grn_pat_inspect_nodes(ctx, obj, buf);
+  }
+
   GRN_TEXT_PUTS(ctx, buf, ">");
 
   return GRN_SUCCESS;




Groonga-commit メーリングリストの案内
アーカイブの一覧に戻る