X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=isamb%2Fisamb.c;fp=isamb%2Fisamb.c;h=9f6b9b5e2d90428bb41cbf1b0c38aab9d1a0f623;hp=4c1c803a8129193cb0feec0c64471581caa9799e;hb=aeea139423b8eaf28a4de53b3d7b2ad1f22284e7;hpb=0052fb5520062c328006dc3537f39d28e88f3579 diff --git a/isamb/isamb.c b/isamb/isamb.c index 4c1c803..9f6b9b5 100644 --- a/isamb/isamb.c +++ b/isamb/isamb.c @@ -101,7 +101,7 @@ struct ISAMB_s { int log_io; /* log level for bf_read/bf_write calls */ int log_freelist; /* log level for freelist handling */ zint skipped_numbers; /* on a leaf node */ - zint returned_numbers; + zint returned_numbers; zint skipped_nodes[ISAMB_MAX_LEVEL]; /* [0]=skipped leaves, 1 = higher etc */ zint accessed_nodes[ISAMB_MAX_LEVEL]; /* nodes we did not skip */ zint number_of_int_splits; @@ -136,7 +136,7 @@ struct ISAMB_PP_s { zint total_size; zint no_blocks; zint skipped_numbers; /* on a leaf node */ - zint returned_numbers; + zint returned_numbers; zint skipped_nodes[ISAMB_MAX_LEVEL]; /* [0]=skipped leaves, 1 = higher etc */ zint accessed_nodes[ISAMB_MAX_LEVEL]; /* nodes we did not skip */ struct ISAMB_block **block; @@ -315,7 +315,7 @@ ISAMB isamb_open2(BFiles bfs, const char *name, int writeflag, ISAMC_M *method, pos++; if (!bf_read(isamb->file[i].bf, pos, 0, 0, hbuf + pos*sizes[i])) { - yaz_log(YLOG_WARN, "truncated isamb header for " + yaz_log(YLOG_WARN, "truncated isamb header for " "file=%s len=%d pos=%d", fname, len, pos); isamb_close(isamb); @@ -352,7 +352,7 @@ ISAMB isamb_open(BFiles bfs, const char *name, int writeflag, ISAMC_M *method, { int sizes[CAT_NO]; int i, b_size = ISAMB_MIN_SIZE; - + for (i = 0; ifile[cat].head.block_size - 1)) * b->file[cat].head.block_size); zint norm = pos / (CAT_MASK*ISAMB_CACHE_ENTRY_SIZE / b->file[cat].head.block_size); @@ -400,13 +400,13 @@ static int cache_block(ISAMB b, ISAM_P pos, unsigned char *userbuf, int wr) { ce_this = *ce; *ce = (*ce)->next; /* remove from list */ - + ce_this->next = b->file[cat].cache_entries; /* move to front */ b->file[cat].cache_entries = ce_this; - + if (wr) { - memcpy(ce_this->buf + off, userbuf, + memcpy(ce_this->buf + off, userbuf, b->file[cat].head.block_size); ce_this->dirty = 1; } @@ -513,9 +513,9 @@ void isamb_close(ISAMB isamb) 0: leader byte, != 0 leaf, == 0, non-leaf 1-2: used size of block 3-7*: number of items and all children - + * Reserve 5 bytes for large block sizes. 1 for small ones .. Number - of items. We can thus have at most 2^40 nodes. + of items. We can thus have at most 2^40 nodes. */ static struct ISAMB_block *open_block(ISAMB b, ISAM_P pos) { @@ -573,7 +573,7 @@ struct ISAMB_block *new_block(ISAMB b, int leaf, int cat) block_no = b->file[cat].head.last_block++; p->pos = block_no * CAT_MAX + cat; if (b->log_freelist) - yaz_log(b->log_freelist, "got block " + yaz_log(b->log_freelist, "got block " ZINT_FORMAT " from last %d:" ZINT_FORMAT, p->pos, cat, p->pos/CAT_MAX); } @@ -592,7 +592,7 @@ struct ISAMB_block *new_block(ISAMB b, int leaf, int cat) } } if (b->log_freelist) - yaz_log(b->log_freelist, "got block " + yaz_log(b->log_freelist, "got block " ZINT_FORMAT " from freelist %d:" ZINT_FORMAT, p->pos, cat, p->pos/CAT_MAX); memcpy(&b->file[cat].head.free_list, p->buf, sizeof(zint)); @@ -637,7 +637,7 @@ static void check_block(ISAMB b, struct ISAMB_block *p) char *endp = p->bytes + p->size; ISAM_P pos; void *c1 = (*b->method->codec.start)(); - + decode_ptr(&src, &pos); assert((pos&CAT_MASK) == p->cat); while (src != endp) @@ -686,7 +686,7 @@ void close_block(ISAMB b, struct ISAMB_block *p) int size = p->size + offset; char *dst = (char*)p->buf + 3; assert(p->size >= 0); - + /* memset becuase encode_ptr usually does not write all bytes */ memset(p->buf, 0, b->file[p->cat].head.block_offset); p->buf[0] = p->leaf; @@ -748,7 +748,7 @@ int insert_int(ISAMB b, struct ISAMB_block *p, void *lookahead_item, assert(sub_p1); diff_terms -= sub_p1->no_items; more = insert_sub(b, &sub_p1, lookahead_item, mode, - stream, &sub_p2, + stream, &sub_p2, sub_item, &sub_size, file_item_buf); diff_terms += sub_p1->no_items; src = src0; @@ -764,7 +764,7 @@ int insert_int(ISAMB b, struct ISAMB_block *p, void *lookahead_item, assert(sub_p1); diff_terms -= sub_p1->no_items; more = insert_sub(b, &sub_p1, lookahead_item, mode, - stream, &sub_p2, + stream, &sub_p2, sub_item, &sub_size, src); diff_terms += sub_p1->no_items; src = src0; @@ -780,7 +780,7 @@ int insert_int(ISAMB b, struct ISAMB_block *p, void *lookahead_item, sub_p1 = open_block(b, pos); assert(sub_p1); diff_terms -= sub_p1->no_items; - more = insert_sub(b, &sub_p1, lookahead_item, mode, stream, &sub_p2, + more = insert_sub(b, &sub_p1, lookahead_item, mode, stream, &sub_p2, sub_item, &sub_size, last_max_item); diff_terms += sub_p1->no_items; } @@ -802,7 +802,7 @@ int insert_int(ISAMB b, struct ISAMB_block *p, void *lookahead_item, assert(sub_size < DST_ITEM_MAX && sub_size > 1); memcpy(dst, startp, src - startp); - + dst += src - startp; #if INT_ENCODE @@ -846,7 +846,7 @@ int insert_int(ISAMB b, struct ISAMB_block *p, void *lookahead_item, const char *half; src = dst_buf; endp = dst; - + b->number_of_int_splits++; p->dirty = 1; @@ -948,7 +948,7 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, { char file_item_buf[DST_ITEM_MAX]; char *file_item = file_item_buf; - + src = p->bytes; endp = p->bytes + p->size; (*b->method->codec.decode)(c1, &file_item, &src); @@ -958,12 +958,12 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, char *lookahead_next; char *dst_0 = dst; int d = -1; - + if (lookahead_item) d = (*b->method->compare_item)(file_item_buf, lookahead_item); - + /* d now holds comparison between existing file item and - lookahead item + lookahead item d = 0: equal d > 0: lookahead before file d < 0: lookahead after file @@ -981,7 +981,7 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, } else if (d == 0 && *lookahead_mode == 2) { - /* For mode == 2, we insert the new key anyway - even + /* For mode == 2, we insert the new key anyway - even though the comparison is 0. */ dst_item = lookahead_item; p->dirty = 1; @@ -1005,11 +1005,11 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, /* encode the resulting item */ (*b->method->codec.encode)(c2, &dst, &dst_item); - + cut_item_size = dst_item - dst_item_0; assert(cut_item_size > 0); memcpy(cut_item_buf, dst_item_0, cut_item_size); - + half2 = dst; no_items_1 = no_items; no_items++; @@ -1022,7 +1022,7 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, } /* now move "pointers" .. result has been encoded .. */ - if (d > 0) + if (d > 0) { /* we must move the lookahead pointer */ @@ -1049,7 +1049,7 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, leaf. Mark it as "gone" */ lookahead_item = 0; } - + p->dirty = 1; } } @@ -1090,7 +1090,7 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, char *dst_item; const char *src = lookahead_item; char *dst_0 = dst; - + /* if we have a lookahead item, we stop if we exceed the value of it */ if (max_item && (*b->method->compare_item)(max_item, lookahead_item) <= 0) @@ -1108,13 +1108,13 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, { const char *src_0 = src; half1 = dst; /* candidate for splitting */ - + (*b->method->codec.encode)(c2, &dst, &src); - + cut_item_size = src - src_0; assert(cut_item_size > 0); memcpy(cut_item_buf, src_0, cut_item_size); - + no_items_1 = no_items; half2 = dst; } @@ -1138,7 +1138,7 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, } } new_size = dst - dst_buf; - if (p && p->cat != b->no_cat-1 && + if (p && p->cat != b->no_cat-1 && new_size > b->file[p->cat].head.block_max) { /* non-btree block will be removed */ @@ -1166,7 +1166,7 @@ int insert_leaf(ISAMB b, struct ISAMB_block **sp1, void *lookahead_item, assert(half2); assert(cut_item_size > 0); - + /* first half */ p->size = half1 - dst_buf; assert(p->size <= b->file[p->cat].head.block_max); @@ -1214,7 +1214,7 @@ int insert_sub(ISAMB b, struct ISAMB_block **p, void *new_item, const void *max_item) { if (!*p || (*p)->leaf) - return insert_leaf(b, p, new_item, mode, stream, sp, sub_item, + return insert_leaf(b, p, new_item, mode, stream, sp, sub_item, sub_size, max_item); else return insert_int(b, *p, new_item, mode, stream, sp, sub_item, @@ -1238,7 +1238,7 @@ int isamb_unlink(ISAMB b, ISAM_P pos) #endif decode_ptr(&src, &sub_p); isamb_unlink(b, sub_p); - + while (src != p1->bytes + p1->size) { #if INT_ENCODE @@ -1289,7 +1289,7 @@ void isamb_merge(ISAMB b, ISAM_P *pos, ISAMC_I *stream) struct ISAMB_block *p = 0, *sp = 0; char sub_item[DST_ITEM_MAX]; int sub_size; - + if (*pos) p = open_block(b, *pos); more = insert_sub(b, &p, item_buf, &i_mode, stream, &sp, @@ -1314,7 +1314,7 @@ void isamb_merge(ISAMB b, ISAM_P *pos, ISAMC_I *stream) dst += sub_size; #endif encode_ptr(&dst, sp->pos); - + p2->size = dst - p2->bytes; p2->no_items = p->no_items + sp->no_items; *pos = p2->pos; /* return new super page */ @@ -1374,7 +1374,7 @@ ISAMB_PP isamb_pp_open_x(ISAMB isamb, ISAM_P pos, int *level, int scope) decode_ptr(&src, &pos); p->offset = src - p->bytes; pp->level++; - pp->accessed_nodes[pp->level]++; + pp->accessed_nodes[pp->level]++; } pp->block[pp->level+1] = 0; pp->maxlevel = pp->level; @@ -1393,7 +1393,7 @@ void isamb_pp_close_x(ISAMB_PP pp, zint *size, zint *blocks) int i; if (!pp) return; - yaz_log(YLOG_DEBUG, "isamb_pp_close lev=%d returned "ZINT_FORMAT" values, " + yaz_log(YLOG_DEBUG, "isamb_pp_close lev=%d returned "ZINT_FORMAT" values, " "skipped "ZINT_FORMAT, pp->maxlevel, pp->skipped_numbers, pp->returned_numbers); for (i = pp->maxlevel; i>=0; i--) @@ -1466,7 +1466,7 @@ static void isamb_dump_r(ISAMB b, ISAM_P pos, void (*pr)(const char *str), p->offset = src - (char*) p->bytes; isamb_dump_r(b, sub, pr, level+1); - + while (p->offset < p->size) { #if INT_ENCODE @@ -1483,11 +1483,11 @@ static void isamb_dump_r(ISAMB b, ISAM_P pos, void (*pr)(const char *str), src += item_len; #endif decode_ptr(&src, &sub); - + p->offset = src - (char*) p->bytes; - + isamb_dump_r(b, sub, pr, level+1); - } + } } close_block(b, p); } @@ -1509,7 +1509,7 @@ void isamb_pp_pos(ISAMB_PP pp, double *current, double *total) /* occureences in the isam tree, based on the current leaf */ assert(total); assert(current); - + /* if end-of-stream PP may not be leaf */ *total = (double) (pp->block[0]->no_items); @@ -1548,19 +1548,19 @@ int isamb_pp_forward(ISAMB_PP pp, void *buf, const void *untilb) pp->block[pp->level] = 0; (pp->level)--; p = pp->block[pp->level]; - assert(!p->leaf); + assert(!p->leaf); } assert(!p->leaf); src = p->bytes + p->offset; - + #if INT_ENCODE c1 = (*b->method->codec.start)(); (*b->method->codec.decode)(c1, &file_item, &src); #else decode_ptr(&src, &item_len); src += item_len; -#endif +#endif decode_ptr(&src, &pos); p->offset = src - (char*) p->bytes; @@ -1599,18 +1599,18 @@ int isamb_pp_forward(ISAMB_PP pp, void *buf, const void *untilb) pp->total_size += p->size; pp->no_blocks++; - - if (p->leaf) + + if (p->leaf) { break; } - + src = p->bytes + p->offset; while(1) { decode_ptr(&src, &pos); p->offset = src - (char*) p->bytes; - + if (!untilb || p->offset == p->size) break; assert(p->offset < p->size); @@ -1650,7 +1650,7 @@ int isamb_pp_forward(ISAMB_PP pp, void *buf, const void *untilb) dst = dst0; if (p->offset == p->size) goto again; } - pp->returned_numbers++; + pp->returned_numbers++; return 1; }