X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fkcompare.c;h=c0575baaaffb29cee31d9bf5b15f314f46ed4cda;hb=817315213374bf6b9a484f7e74fd4913d99c0755;hp=bb37339614a6c183485af0df37593cdecefb0a01;hpb=0b7781e8c428a4bca098fff6f074fef83c06e560;p=idzebra-moved-to-github.git diff --git a/index/kcompare.c b/index/kcompare.c index bb37339..c0575ba 100644 --- a/index/kcompare.c +++ b/index/kcompare.c @@ -4,7 +4,27 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: kcompare.c,v $ - * Revision 1.5 1995-09-11 13:09:34 adam + * Revision 1.11 1995-10-06 16:33:37 adam + * Use attribute mappings. + * + * Revision 1.10 1995/09/29 14:01:41 adam + * Bug fixes. + * + * Revision 1.9 1995/09/28 12:10:32 adam + * Bug fixes. Field prefix used in queries. + * + * Revision 1.8 1995/09/28 09:19:42 adam + * xfree/xmalloc used everywhere. + * Extract/retrieve method seems to work for text records. + * + * Revision 1.7 1995/09/27 12:22:28 adam + * More work on extract in record control. + * Field name is not in isam keys but in prefix in dictionary words. + * + * Revision 1.6 1995/09/14 07:48:23 adam + * Record control management. + * + * Revision 1.5 1995/09/11 13:09:34 adam * More work on relevance feedback. * * Revision 1.4 1995/09/08 14:52:27 adam @@ -39,46 +59,31 @@ void key_logdump (int logmask, const void *p) struct it_key key; memcpy (&key, p, sizeof(key)); -#if IT_KEY_HAVE_SEQNO - logf (logmask, "%7d s=%-3d", key.sysno, key.seqno); -#else - logf (logmask, "%7d f=%-3d", key.sysno, key.freq); -#endif + logf (logmask, "%7d s=%-4d", key.sysno, key.seqno); } int key_compare (const void *p1, const void *p2) { - struct it_key i1, i2; - memcpy (&i1, p1, sizeof(i1)); - memcpy (&i2, p2, sizeof(i2)); - if (i1.sysno != i2.sysno) + const struct it_key *i1 = p1, *i2 = p2; + if (i1->sysno != i2->sysno) { - if (i1.sysno > i2.sysno) + if (i1->sysno > i2->sysno) return 2; else return -2; } #if IT_KEY_HAVE_SEQNO - if (i1.seqno != i2.seqno) + if (i1->seqno != i2->seqno) { - if (i1.seqno > i2.seqno) + if (i1->seqno > i2->seqno) return 1; else return -1; } #else - if (i1.freq != i2.freq) - { - if (i1.freq > i2.freq) - return 1; - else - return -1; - } -#endif -#if IT_KEY_HAVE_FIELD - if (i1.field != i2.field) + if (i1->freq != i2->freq) { - if (i1.field > i2.field) + if (i1->freq > i2->freq) return 1; else return -1; @@ -87,7 +92,30 @@ int key_compare (const void *p1, const void *p2) return 0; } +int key_qsort_compare (const void *p1, const void *p2) +{ + int r; + size_t l; + char *cp1 = *(char **) p1; + char *cp2 = *(char **) p2; + + if ((r = strcmp (cp1, cp2))) + return r; + l = strlen(cp1)+1; + if ((r = key_compare (cp1+l+1, cp2+l+1))) + return r; + return cp1[l] - cp2[l]; +} + int index_char_cvt (int c) { return tolower (c); } + +int index_word_prefix (char *string, int attset_ordinal, + int local_attribute) +{ + sprintf (string, "%c%04d", attset_ordinal + '0', local_attribute); + return 5; +} +