null+****@clear*****
null+****@clear*****
2012年 2月 8日 (水) 23:15:08 JST
Daijiro MORI 2012-02-08 23:15:08 +0900 (Wed, 08 Feb 2012)
New Revision: 0a7e0b37192e18e674181a6707af331f0e7a38c0
Log:
prepared for compressing the temporary file
Modified files:
lib/ii.c
Modified: lib/ii.c (+32 -16)
===================================================================
--- lib/ii.c 2012-02-08 17:50:58 +0900 (979584b)
+++ lib/ii.c 2012-02-08 23:15:08 +0900 (cd998ff)
@@ -6355,6 +6355,17 @@ typedef struct {
uint32_t nposts;
grn_id lastrec;
uint32_t offset;
+
+ uint32_t nrecords;
+ uint32_t npostings;
+ grn_id last_rid;
+ uint32_t last_sid;
+ uint32_t last_pos;
+ uint32_t offset_rid;
+ uint32_t offset_sid;
+ uint32_t offset_weight;
+ uint32_t offset_tf;
+ uint32_t offset_pos;
} builder_counter;
typedef struct {
@@ -6447,29 +6458,29 @@ grn_ii_builder_flush(grn_ctx *ctx, grn_ii_builder *builder)
}
{
grn_id rid = 0;
- uint32_t post = 0;
+ uint32_t pos = 0;
uint32_t rest;
grn_id *bp;
for (bp = builder->blockbuf, rest = builder->blockpos; rest; bp++, rest--) {
grn_id id = *bp;
if (id & BUILD_RID_FLAG) {
rid = id - BUILD_RID_FLAG;
- post = 0;
+ pos = 0;
} else {
builder_counter *counter = &builder->counters[id - 1];
- outbuf[counter->nposts++] = post;
- if (outbuf[counter->offset]) {
- if (outbuf[counter->offset] == rid) {
- outbuf[counter->offset + counter->nrecs]++;
- } else {
- outbuf[++counter->offset] = rid;
- outbuf[counter->offset + counter->nrecs] = 1;
- }
+ if (counter->last_rid == rid) {
+ outbuf[counter->offset + counter->nrecs]++;
} else {
- outbuf[counter->offset] = rid;
+ if (counter->last_rid) { counter->offset++; }
+ counter->last_sid = 0;
+ counter->last_pos = 0;
+ outbuf[counter->offset] = rid - counter->last_rid;
+ counter->last_rid = rid;
outbuf[counter->offset + counter->nrecs] = 1;
}
- post++;
+ outbuf[counter->nposts++] = pos - counter->last_pos;
+ counter->last_pos = pos;
+ pos++;
}
}
}
@@ -6488,6 +6499,8 @@ grn_ii_builder_flush(grn_ctx *ctx, grn_ii_builder *builder)
counter->nposts = 0;
counter->lastrec = 0;
counter->offset = 0;
+
+ counter->last_rid = 0; /* FIXME */
}
}
builder->blockpos = 0;
@@ -6587,7 +6600,7 @@ grn_ii_builder_parse(grn_ctx *ctx, grn_ii_builder *builder)
close(builder->tmpfd);
GRN_FREE(builder->blockbuf);
GRN_FREE(builder->counters);
- GRN_LOG(ctx, GRN_LOG_WARNING, "nblocks: %d", builder->nblocks);
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "nblocks: %d", builder->nblocks);
}
static void
@@ -6718,11 +6731,14 @@ grn_ii_builder_merge_one(grn_ctx *ctx, grn_ii_builder *builder,
uint32_t *pp = block->posts;
uint32_t n;
for (n = block->nrecs; n; n--) {
- uint32_t lp = 0;
uint32_t np;
- *ridp++ = *rp - lr; lr = *rp++;
+ if (n == block->nrecs) { /* FIXME */
+ *ridp = *rp++ - lr; lr += *ridp++;
+ } else {
+ *ridp = *rp++; lr += *ridp++;
+ }
for (np = *tp; np; np--) {
- *posp = *pp - lp; lp = *pp++;
+ *posp = *pp++;
spos += *posp++;
}
*tfp++ = *tp++ - 1;