X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fkcompare.c;h=878f491cc611b4f22a7870ed8cf97cb3836fab31;hb=9a677b99c57aed3fa62f6737c4b8fd5bf2114d8b;hp=5ffab21aa39f83c889a29ea59ced46d3ade49f23;hpb=d8728143be0a28eb22a93d91c4ba7d3ab6c3f6cb;p=idzebra-moved-to-github.git diff --git a/index/kcompare.c b/index/kcompare.c index 5ffab21..878f491 100644 --- a/index/kcompare.c +++ b/index/kcompare.c @@ -4,7 +4,25 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: kcompare.c,v $ - * Revision 1.9 1995-09-28 12:10:32 adam + * Revision 1.15 1995-11-20 16:59:46 adam + * New update method: the 'old' keys are saved for each records. + * + * Revision 1.14 1995/10/30 15:08:08 adam + * Bug fixes. + * + * Revision 1.13 1995/10/27 14:00:11 adam + * Implemented detection of database availability. + * + * Revision 1.12 1995/10/17 18:02:08 adam + * New feature: databases. Implemented as prefix to words in dictionary. + * + * 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 @@ -58,26 +76,28 @@ void key_logdump (int logmask, const void *p) int key_compare (const void *p1, const void *p2) { - const struct it_key *i1 = p1, *i2 = p2; - if (i1->sysno != i2->sysno) + struct it_key i1, i2; + memcpy (&i1, p1, sizeof(i1)); + memcpy (&i2, p2, sizeof(i2)); + 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) { - if (i1->freq > i2->freq) + if (i1.freq > i2.freq) return 1; else return -1; @@ -86,13 +106,35 @@ 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 attrSet, int attrUse) +int index_word_prefix (char *string, int attset_ordinal, + int local_attribute, + const char *databaseName) { - sprintf (string, "%c%04d", attrSet + '0', attrUse); - return 5; + int i; + sprintf (string, "%s@%c%04d", databaseName, + attset_ordinal + '0', local_attribute); + for (i = 0; string[i]; i++) + string[i] = index_char_cvt (string[i]); + return i; } +