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

Defined functions

kcompare defined in line 75; used 1 times
Last modified: 1986-04-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 812
Valid CSS Valid XHTML 1.0 Strict