-static int r_read_and (RSFD rfd, void *buf, int *term_index)
-{
- struct rset_bool_rfd *p = (struct rset_bool_rfd *) rfd;
- struct rset_bool_info *info = p->info;
-
- while (p->more_l || p->more_r)
- {
- int cmp;
-
- if (p->more_l && p->more_r)
- cmp = (*info->cmp)(p->buf_l, p->buf_r);
- else if (p->more_l)
- cmp = -2;
- else
- cmp = 2;
- if (!cmp)
- {
- memcpy (buf, p->buf_l, info->key_size);
- *term_index = p->term_index_l;
- p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l,
- &p->term_index_l);
- p->tail = 1;
- }
- else if (cmp == 1)
- {
- memcpy (buf, p->buf_r, info->key_size);
- *term_index = p->term_index_r + info->term_index_s;
- p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r,
- &p->term_index_r);
- p->tail = 1;
- return 1;
- }
- else if (cmp == -1)
- {
- memcpy (buf, p->buf_l, info->key_size);
- *term_index = p->term_index_l;
- p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l,
- &p->term_index_l);
- p->tail = 1;
- return 1;
- }
- else if (cmp > 1)
- {
- memcpy (buf, p->buf_r, info->key_size);
- *term_index = p->term_index_r + info->term_index_s;
-
- p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r,
- &p->term_index_r);
- if (p->tail)
- {
- if (!p->more_r || (*info->cmp)(p->buf_r, buf) > 1)
- p->tail = 0;
- return 1;
- }
- }
- else
- {
- memcpy (buf, p->buf_l, info->key_size);
- *term_index = p->term_index_l;
- p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l,
- &p->term_index_l);
- if (p->tail)
- {
- if (!p->more_l || (*info->cmp)(p->buf_l, buf) > 1)
- p->tail = 0;
- return 1;
- }
- }
- }
- return 0;
-}
-
-static int r_read_or (RSFD rfd, void *buf, int *term_index)