-/* $Id: isamb.c,v 1.50 2004-08-06 09:43:03 heikki Exp $
+/* $Id: isamb.c,v 1.52 2004-08-06 12:28:23 adam Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
static int get_block (ISAMB b, ISAMC_P pos, char *userbuf, int wr)
{
- int cat = pos&CAT_MASK;
- int off = ((pos/CAT_MAX) &
+ int cat = (int) (pos&CAT_MASK);
+ int off = (int) (((pos/CAT_MAX) &
(ISAMB_CACHE_ENTRY_SIZE / b->file[cat].head.block_size - 1))
- * b->file[cat].head.block_size;
- int norm = pos / (CAT_MASK*ISAMB_CACHE_ENTRY_SIZE / b->file[cat].head.block_size);
+ * b->file[cat].head.block_size);
+ zint norm = pos / (CAT_MASK*ISAMB_CACHE_ENTRY_SIZE / b->file[cat].head.block_size);
int no = 0;
struct ISAMB_cache_entry **ce, *ce_this = 0, **ce_last = 0;
static struct ISAMB_block *open_block (ISAMB b, ISAMC_P pos)
{
- int cat = pos&CAT_MASK;
+ int cat = (int) (pos&CAT_MASK);
struct ISAMB_block *p;
if (!pos)
return 0;
p = xmalloc (sizeof(*p));
p->pos = pos;
- p->cat = pos & CAT_MASK;
+ p->cat = (int) (pos & CAT_MASK);
p->buf = xmalloc (b->file[cat].head.block_size);
p->cbuf = 0;
if (!b->file[cat].head.free_list)
{
- int block_no;
+ zint block_no;
block_no = b->file[cat].head.last_block++;
p->pos = block_no * CAT_MAX + cat;
}
while (src <= half)
{
decode_ptr (&src, &split_size_tmp);
- *split_size = split_size_tmp;
+ *split_size = (int) split_size_tmp;
src += *split_size;
decode_ptr (&src, &pos);
memcpy (p->bytes, dst_buf, p_new_size);
decode_ptr (&src, &split_size_tmp);
- *split_size = split_size_tmp;
+ *split_size = (int) split_size_tmp;
memcpy (split_item, src, *split_size);
src += *split_size;
void isamb_dump (ISAMB b, ISAMB_P pos, void (*pr)(const char *str))
{
- return isamb_dump_r(b, pos, pr, 0);
+ isamb_dump_r(b, pos, pr, 0);
}
#if 0
} /* climb_level */
-static int isamb_pp_forward_unode(ISAMB_PP pp, int pos, const void *untilbuf)
+static zint isamb_pp_forward_unode(ISAMB_PP pp, zint pos, const void *untilbuf)
{ /* scans a upper node until it finds a child <= untilbuf */
/* pp points to the key value, as always. pos is the child read from */
/* the buffer */
}
static void isamb_pp_leaf_pos( ISAMB_PP pp,
- zint *current, zint *total, void *dummybuf )
+ double *current, double *total,
+ void *dummybuf )
{
struct ISAMB_block *p = pp->block[pp->level];
const char *src=p->bytes;
(*current)++;
}
#if ISAMB_DEBUG
- logf(LOG_DEBUG, "isamb_pp_leaf_pos: cur="ZINT_FORMAT" tot="ZINT_FORMAT
+ logf(LOG_DEBUG, "isamb_pp_leaf_pos: cur= %0.1f tot=%0.1f "
" ofs=%d sz=%d lev=%d",
*current, *total, p->offset, p->size, pp->level);
#endif
(pp->isamb->method->codec.stop)(decodeClientData);
}
-static void isamb_pp_upper_pos( ISAMB_PP pp, zint *current, zint *total,
+static void isamb_pp_upper_pos( ISAMB_PP pp, double *current, double *total,
zint size, int level )
{ /* estimates total/current occurrences from here up, excl leaf */
struct ISAMB_block *p = pp->block[level];
decode_ptr (&src, &child );
}
if (level>0)
- isamb_pp_upper_pos(pp, current, total, *total, level-1);
+ isamb_pp_upper_pos(pp, current, total, (zint) *total, level-1);
} /* upper_pos */
-void isamb_pp_pos( ISAMB_PP pp, zint *current, zint *total )
+void isamb_pp_pos( ISAMB_PP pp, double *current, double *total )
{ /* return an estimate of the current position and of the total number of */
/* occureences in the isam tree, based on the current leaf */
struct ISAMB_block *p = pp->block[pp->level];
assert(p->leaf);
isamb_pp_leaf_pos(pp,current, total, dummy);
if (pp->level>0)
- isamb_pp_upper_pos(pp, current, total, *total, pp->level-1);
+ isamb_pp_upper_pos(pp, current, total, (zint) *total, pp->level-1);
}