Fixes for hit estimates. Added zebra_set_approx_limit.
[idzebra-moved-to-github.git] / rset / rset.c
index c825bf0..648193a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: rset.c,v 1.48 2005-06-06 21:31:09 adam Exp $
+/* $Id: rset.c,v 1.51 2005-06-09 10:39:53 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -166,7 +166,7 @@ RSET rset_create_base(const struct rset_control *sel,
     rset->free_list = NULL;
     rset->use_list = NULL;
     rset->hits_count = 0;
-    rset->hits_limit = 1000;
+    rset->hits_limit = 0;
     rset->hits_round = 1000;
     rset->keycontrol = kcontrol;
     (*kcontrol->inc)(kcontrol);
@@ -277,6 +277,28 @@ void rset_get_one_term(RSET ct, TERMID *terms, int maxterms, int *curterm)
     }
 }
 
+struct ord_list *ord_list_create(NMEM nmem)
+{
+    return 0;
+}
+
+struct ord_list *ord_list_append(NMEM nmem, struct ord_list *list,
+                                       int ord)
+{
+    struct ord_list *n = nmem_malloc(nmem, sizeof(*n));
+    n->ord = ord;
+    n->next = list;
+    return n;
+}
+
+struct ord_list *ord_list_dup(NMEM nmem, struct ord_list *list)
+{
+    struct ord_list *n = ord_list_create(nmem);
+    for (; list; list = list->next)
+       n = ord_list_append(nmem, n, list->ord);
+    return n;
+}
+
 /**
    \brief Creates a TERMID entry.
    \param name Term/Name buffer with given length
@@ -285,9 +307,11 @@ void rset_get_one_term(RSET ct, TERMID *terms, int maxterms, int *curterm)
    \param type Term Type, Z_Term_general, Z_Term_characterString,..
    \param nmem memory for term.
    \param ol ord list
+   \param reg_type register type
 */
 TERMID rset_term_create(const char *name, int length, const char *flags,
-                       int type, NMEM nmem, struct ord_list *ol)
+                       int type, NMEM nmem, struct ord_list *ol,
+                       int reg_type)
 
 {
     TERMID t;
@@ -309,9 +333,10 @@ TERMID rset_term_create(const char *name, int length, const char *flags,
     else
         t->flags = nmem_strdup(nmem, flags);
     t->type = type;
+    t->reg_type = reg_type;
     t->rankpriv = 0;
     t->rset = 0;
-    t->ol = ol;
+    t->ol = ord_list_dup(nmem, ol);
     return t;
 }
 
@@ -322,7 +347,7 @@ int rset_default_read(RSFD rfd, void *buf, TERMID *term)
     if (rc > 0)
     {
        if (rfd->counted_items == 0 ||
-           (rset->keycontrol->cmp)(buf, rfd->counted_buf) >= rset->scope)
+           (rset->keycontrol->cmp)(buf, rfd->counted_buf) > rset->scope)
        {
            memcpy(rfd->counted_buf, buf, rset->keycontrol->key_size);
            rfd->counted_items++;