Honor position attribute, i.e. allow first-in-field search. To
[idzebra-moved-to-github.git] / index / kcompare.c
index d05ad2a..00050c7 100644 (file)
@@ -1,5 +1,5 @@
-/* $Id: kcompare.c,v 1.57 2005-05-31 07:29:10 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>
@@ -68,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])
@@ -97,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])
@@ -118,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;
@@ -149,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;
 }
 
@@ -158,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;
 }
 
@@ -216,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];
@@ -338,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
+ */
+