null+****@clear*****
null+****@clear*****
2010年 9月 22日 (水) 16:49:18 JST
Kouhei Sutou 2010-09-22 07:49:18 +0000 (Wed, 22 Sep 2010)
New Revision: 433613e9112714862eff84e30d4db225d0bcdefe
Log:
inspect supports ii deeply.
Modified files:
lib/ii.c
lib/ii.h
lib/util.c
Modified: lib/ii.c (+70 -0)
===================================================================
--- lib/ii.c 2010-09-22 05:06:59 +0000 (579fac8)
+++ lib/ii.c 2010-09-22 07:49:18 +0000 (4c61487)
@@ -26,6 +26,7 @@
#include "pat.h"
#include "db.h"
#include "output.h"
+#include "util.h"
#define MAX_PSEG 0x20000
#define S_CHUNK (1 << GRN_II_W_CHUNK)
@@ -5999,3 +6000,72 @@ grn_ii_resolve_sel_and(grn_ctx *ctx, grn_hash *s, grn_operator op)
}
}
}
+
+void
+grn_ii_cursor_inspect(grn_ctx *ctx, grn_ii_cursor *c, grn_obj *buf)
+{
+ grn_obj key_buf;
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_size;
+ int i = 0;
+
+ GRN_TEXT_PUTS(ctx, buf, "#<");
+ key_size = grn_table_get_key(ctx, c->ii->lexicon, c->id,
+ key, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_OBJ_INIT(&key_buf, GRN_BULK, 0, c->ii->lexicon->header.domain);
+ GRN_TEXT_SET(ctx, &key_buf, key, key_size);
+ grn_inspect(ctx, buf, &key_buf);
+ GRN_OBJ_FIN(ctx, &key_buf);
+
+ GRN_TEXT_PUTS(ctx, buf, " elements:[");
+ while (grn_ii_cursor_next(ctx, c)) {
+ grn_ii_posting *pos = c->post;
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ }
+ i++;
+ GRN_TEXT_PUTS(ctx, buf, "{rid:");
+ grn_text_lltoa(ctx, buf, pos->rid);
+ GRN_TEXT_PUTS(ctx, buf, ", sid:");
+ grn_text_lltoa(ctx, buf, pos->sid);
+ GRN_TEXT_PUTS(ctx, buf, ", pos:");
+ grn_text_lltoa(ctx, buf, pos->pos);
+ GRN_TEXT_PUTS(ctx, buf, ", tf:");
+ grn_text_lltoa(ctx, buf, pos->tf);
+ GRN_TEXT_PUTS(ctx, buf, ", weight:");
+ grn_text_lltoa(ctx, buf, pos->weight);
+ GRN_TEXT_PUTS(ctx, buf, ", rest:");
+ grn_text_lltoa(ctx, buf, pos->rest);
+ GRN_TEXT_PUTS(ctx, buf, "}");
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]>");
+}
+
+void
+grn_ii_inspect_elements(grn_ctx *ctx, grn_ii *ii, grn_obj *buf)
+{
+ grn_table_cursor *tc;
+ GRN_TEXT_PUTS(ctx, buf, "[");
+ if ((tc = grn_table_cursor_open(ctx, ii->lexicon, NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_ASCENDING))) {
+ int i = 0;
+ grn_id tid;
+ grn_ii_cursor *c;
+ while ((tid = grn_table_cursor_next(ctx, tc))) {
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, buf, ",");
+ }
+ i++;
+ GRN_TEXT_PUTS(ctx, buf, "\n ");
+ if ((c = grn_ii_cursor_open(ctx, ii, tid, GRN_ID_NIL, GRN_ID_MAX,
+ ii->n_elements,
+ GRN_OBJ_WITH_POSITION|GRN_OBJ_WITH_SECTION))) {
+ grn_ii_cursor_inspect(ctx, c, buf);
+ grn_ii_cursor_close(ctx, c);
+ }
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+}
+
Modified: lib/ii.h (+3 -0)
===================================================================
--- lib/ii.h 2010-09-22 05:06:59 +0000 (34375a4)
+++ lib/ii.h 2010-09-22 07:49:18 +0000 (ce894ec)
@@ -186,6 +186,9 @@ void grn_ii_resolve_sel_and(grn_ctx *ctx, grn_hash *s, grn_operator op);
grn_rc grn_ii_at(grn_ctx *ctx, grn_ii *ii, grn_id id, grn_hash *s, grn_operator op);
+void grn_ii_inspect_elements(grn_ctx *ctx, grn_ii *ii, grn_obj *buf);
+void grn_ii_cursor_inspect(grn_ctx *ctx, grn_ii_cursor *c, grn_obj *buf);
+
#ifdef __cplusplus
}
#endif
Modified: lib/util.c (+4 -0)
===================================================================
--- lib/util.c 2010-09-22 05:06:59 +0000 (64f4c2b)
+++ lib/util.c 2010-09-22 07:49:18 +0000 (dea483f)
@@ -19,6 +19,7 @@
#include <stdio.h>
#include "db.h"
#include "pat.h"
+#include "ii.h"
#include "util.h"
grn_rc
@@ -290,6 +291,9 @@ grn_ii_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
GRN_TEXT_PUTS(ctx, buf, "NONE");
}
+ GRN_TEXT_PUTS(ctx, buf, " elements:");
+ grn_ii_inspect_elements(ctx, (grn_ii *)obj, buf);
+
GRN_TEXT_PUTS(ctx, buf, ">");
return GRN_SUCCESS;