null+****@clear*****
null+****@clear*****
2010年 7月 27日 (火) 22:27:31 JST
Daijiro MORI 2010-07-27 13:27:31 +0000 (Tue, 27 Jul 2010) New Revision: d455ee851dafee0015adef17484643f17ca3492e Log: Enhanced grn_ja_check(). Modified files: lib/store.c Modified: lib/store.c (+36 -15) =================================================================== --- lib/store.c 2010-07-27 13:13:08 +0000 (aaee261) +++ lib/store.c 2010-07-27 13:27:31 +0000 (2e54fc1) @@ -1085,36 +1085,57 @@ grn_ja_check(grn_ctx *ctx, grn_ja *ja) if ((dseg & SEG_MASK) == SEG_SEQ) { byte *v = NULL, *ve; uint32_t element_size, cum = 0, sum = dseg & ~SEG_MASK; - //GRN_OUTPUT_CSTR("seg seq"); - //GRN_OUTPUT_ARRAY_OPEN("SEQ", -1); + uint32_t n_del_elements = 0, n_elements = 0, s_del_elements = 0, s_elements = 0; GRN_IO_SEG_REF(ja->io, seg, v); if (v) { + /* + GRN_OUTPUT_CSTR("seg seq"); + GRN_OUTPUT_ARRAY_OPEN("SEQ", -1); + */ ve = v + JA_SEGMENT_SIZE; while (v < ve && cum < sum) { grn_id id = *((grn_id *)v); - // GRN_OUTPUT_MAP_OPEN("ENTRY", -1); - // GRN_OUTPUT_CSTR("id"); - // GRN_OUTPUT_INT64(id); + /* + GRN_OUTPUT_MAP_OPEN("ENTRY", -1); + GRN_OUTPUT_CSTR("id"); + GRN_OUTPUT_INT64(id); + */ if (id & DELETED) { element_size = (id & ~DELETED); + n_del_elements++; + s_del_elements += element_size; } else { element_size = grn_ja_size(ctx, ja, id); element_size = (element_size + sizeof(grn_id) - 1) & ~(sizeof(grn_id) - 1); cum += sizeof(uint32_t) + element_size; + n_elements++; + s_elements += element_size; } - // GRN_OUTPUT_CSTR("size"); - // GRN_OUTPUT_INT64(element_size); - // GRN_OUTPUT_CSTR("cum"); - // GRN_OUTPUT_INT64(cum); v += sizeof(uint32_t) + element_size; - // GRN_OUTPUT_MAP_CLOSE(); + /* + GRN_OUTPUT_CSTR("size"); + GRN_OUTPUT_INT64(element_size); + GRN_OUTPUT_CSTR("cum"); + GRN_OUTPUT_INT64(cum); + GRN_OUTPUT_MAP_CLOSE(); + */ } GRN_IO_SEG_UNREF(ja->io, seg); - } - //GRN_OUTPUT_ARRAY_CLOSE(); - if (cum != sum) { - GRN_OUTPUT_CSTR("cum gap"); - GRN_OUTPUT_INT64(cum - sum); + /* + GRN_OUTPUT_ARRAY_CLOSE(); + */ + GRN_OUTPUT_CSTR("n_elements"); + GRN_OUTPUT_INT64(n_elements); + GRN_OUTPUT_CSTR("s_elements"); + GRN_OUTPUT_INT64(s_elements); + GRN_OUTPUT_CSTR("n_del_elements"); + GRN_OUTPUT_INT64(n_del_elements); + GRN_OUTPUT_CSTR("s_del_elements"); + GRN_OUTPUT_INT64(s_del_elements); + if (cum != sum) { + GRN_OUTPUT_CSTR("cum gap"); + GRN_OUTPUT_INT64(cum - sum); + } } } GRN_OUTPUT_MAP_CLOSE();