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;