Annotation of 42BSD/ingres/source/iutil/compare.c, revision 1.1.1.1

1.1       root        1: # include      <ingres.h>
                      2: # include      <access.h>
                      3: # include      <symbol.h>
                      4: # include      <aux.h>
                      5: # include      <sccs.h>
                      6: 
                      7: SCCSID(@(#)compare.c   7.1     2/5/81)
                      8: 
                      9: icompare(ax, bx, frmt, frml)
                     10: char   *ax, *bx, frmt, frml;
                     11: {
                     12:        register ANYTYPE        *a, *b;
                     13:        register int            length;
                     14:        ANYTYPE                 atemp, btemp;
                     15: 
                     16:        length = frml & I1MASK;
                     17:        if (frmt == CHAR)
                     18:                return (scompare(ax, length, bx, length));
                     19:        a = &atemp;
                     20:        b = &btemp;
                     21:        bmove(ax, (char *) a, length);
                     22:        bmove(bx, (char *) b, length);
                     23:        if (bequal((char *) a, (char *) b, length))
                     24:                return (0);
                     25:        switch (frmt)
                     26:        {
                     27:          case INT:
                     28:                switch (length)
                     29:                {
                     30:                  case 1:
                     31:                        return (a->i1type - b->i1type);
                     32:                  case 2:
                     33:                        return (a->i2type - b->i2type);
                     34:                  case 4:
                     35:                        return (a->i4type > b->i4type ? 1 : -1);
                     36:                }
                     37:                break;
                     38: 
                     39:          case FLOAT:
                     40:                if (frml == 4)
                     41:                        return (a->f4type > b->f4type ? 1 : -1);
                     42:                else
                     43:                        return (a->f8type > b->f8type ? 1 : -1);
                     44:                break;
                     45:        }
                     46:        syserr("compare: t=%d,l=%d", frmt, frml);
                     47:        /*NOTREACHED*/
                     48: }
                     49: /*
                     50: **  KCOMPARE -- key compare
                     51: **
                     52: **     compares all domains indicated by SETKEY in the tuple to the
                     53: **     corressponding domains in the key.
                     54: **     the comparison is done according to the format of the domain
                     55: **     as specified in the descriptor.
                     56: **
                     57: **     function values:
                     58: **             <0 tuple < key
                     59: **             =0 tuple = key
                     60: **             >0 tuple > key
                     61: */
                     62: 
                     63: kcompare (dx, tuple, key)
                     64: DESC   *dx;                    /*relation descriptor   */
                     65: char   tuple[MAXTUP];          /*tuple to be compared  */
                     66: char   key[MAXTUP];            /*second tuple or key   */
                     67: {
                     68:        register int    i, tmp;
                     69:        register DESC   *d;
                     70: 
                     71:        d = dx;
                     72:        for (i = 1; i <= d->reldum.relatts; i++)
                     73:                if (d->relgiven[i])
                     74:                        if (tmp = icompare(&tuple[d->reloff[i]],
                     75:                                &key[d->reloff[i]],
                     76:                                d->relfrmt[i],
                     77:                                d->relfrml[i]))
                     78:                        {
                     79:                                return (tmp);
                     80:                        }
                     81:        return (0);
                     82: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.