Honor position attribute, i.e. allow first-in-field search. To
[idzebra-moved-to-github.git] / index / kcompare.c
index b53c516..00050c7 100644 (file)
@@ -1,5 +1,5 @@
-/* $Id: kcompare.c,v 1.56 2005-04-13 13:03:47 adam Exp $
-   Copyright (C) 1995-2005
+/* $Id: kcompare.c,v 1.61 2006-08-16 13:16:36 adam Exp $
+   Copyright (C) 1995-2006
    Index Data ApS
 
 This file is part of the Zebra server.
@@ -15,9 +15,9 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra.  If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
 */
 
 #include <stdlib.h>
@@ -33,9 +33,11 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #define CODEC_INLINE
 #endif
 
-void key_logdump_txt (int logmask, const void *p, const char *txt)
+void key_logdump_txt(int logmask, const void *p, const char *txt)
 {
     struct it_key key;
+    if (!txt)
+       txt = "(none)";
     if (p)
     {
        char formstr[128];
@@ -50,13 +52,13 @@ void key_logdump_txt (int logmask, const void *p, const char *txt)
                strcat(formstr, ".");
            sprintf(formstr + strlen(formstr), ZINT_FORMAT, key.mem[i]);
        }
-        yaz_log (logmask, "%s %s", formstr, txt);
+        yaz_log(logmask, "%s %s", formstr, txt);
     }
     else
-        yaz_log(logmask, " (null) %s",txt);
+        yaz_log(logmask, " (no key) %s",txt);
 }
 
-void key_logdump (int logmask, const void *p)
+void key_logdump(int logmask, const void *p)
 {
     key_logdump_txt(logmask,  p, "");
 }
@@ -66,7 +68,7 @@ int key_compare_it (const void *p1, const void *p2)
     int i, l = ((struct it_key *) p1)->len;
     if (((struct it_key *) p2)->len > l)
        l = ((struct it_key *) p2)->len;
-    assert (l <= 4 && l > 0);
+    assert (l <= IT_KEY_LEVEL_MAX && l > 0);
     for (i = 0; i < l; i++)
     {
        if (((struct it_key *) p1)->mem[i] != ((struct it_key *) p2)->mem[i])
@@ -95,7 +97,7 @@ int key_compare (const void *p1, const void *p2)
     l = i1.len;
     if (i2.len > l)
        l = i2.len;
-    assert (l <= 4 && l > 0);
+    assert (l <= IT_KEY_LEVEL_MAX && l > 0);
     for (i = 0; i < l; i++)
     {
        if (i1.mem[i] != i2.mem[i])
@@ -116,6 +118,13 @@ zint key_get_seq(const void *p)
     return k.mem[k.len-1];
 }
 
+zint key_get_segment(const void *p)
+{
+    struct it_key k;
+    memcpy (&k, p, sizeof(k));
+    return k.mem[k.len-2];
+}
+
 int key_qsort_compare (const void *p1, const void *p2)
 {
     int r;
@@ -147,7 +156,7 @@ void key_init(struct it_key *key)
 {
     int i;
     key->len = 0;
-    for (i = 0; i<IT_KEY_LEVEL_MAX; i++)
+    for (i = 0; i < IT_KEY_LEVEL_MAX; i++)
        key->mem[i] = 0;
 }
 
@@ -156,7 +165,7 @@ void iscz1_reset (void *vp)
     struct iscz1_code_info *p = (struct iscz1_code_info *) vp;
     int i;
     p->key.len = 0;
-    for (i = 0; i< IT_KEY_LEVEL_MAX; i++)
+    for (i = 0; i < IT_KEY_LEVEL_MAX; i++)
        p->key.mem[i] = 0;
 }
 
@@ -214,7 +223,7 @@ void iscz1_encode (void *vp, char **dst, const char **src)
 
     /* deal with leader + delta encoding .. */
     d = 0;
-    assert(tkey.len > 0 && tkey.len <= 4);
+    assert(tkey.len > 0 && tkey.len <= IT_KEY_LEVEL_MAX);
     for (i = 0; i < tkey.len; i++)
     {
        d = tkey.mem[i] - p->key.mem[i];
@@ -336,3 +345,11 @@ int key_SU_decode (int *ch, const unsigned char *out)
     return len;
 }
 
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+