⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpkey.c

📁 免费的Sql数据库系统
💻 C
字号:
/*  cmpkey.c  - Comparision of keys *              Kernel of GNU SQL-server. Sorter    * * This file is a part of GNU SQL Server * *  Copyright (c) 1996, 1997, Free Software Foundation, Inc *  Developed at the Institute of System Programming *  This file is written by  Vera Ponomarenko * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or 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 this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * *  Contacts:   gss@ispras.ru * *//* $Id: cmpkey.c,v 1.245 1997/03/31 03:46:38 kml Exp $ */#include "dessrt.h"#include "pupsi.h"#include "f1f2decl.h"#include "fdclsrt.h"extern char *nonsense;extern u2_t kn;intcmpkey (u2_t *afn, struct des_field *df, char *drctn, char *pk1, char *pk2){  i4_t d, kk, k, v;  char *k1, *kval1, *k2, *kval2;  u2_t n1, n2;  if (pk1 == nonsense)    return (1);			/* The first is absent */  if (pk2 == nonsense)    return (-1);		/* The second is absent */  pk1 += size2b + tidsize;  pk2 += size2b + tidsize;  k1 = kval1 = pk1 + scscal (pk1);  k2 = kval2 = pk2 + scscal (pk2);  if (*drctn == GROW)    d = 1;  else    d = -1;    v = 0;  for (kk = 0, k = 0; kk < kn && pk1 < k1 && pk2 < k2; kk++, k++)    {      if (k == 7)	{	  k = 0;	  pk1++;	  if (pk1 >= k1)	    break;	  pk2++;	  if (pk2 >= k2)	    break;	}      if (*drctn++ == GROW)	d = 1;      else	d = -1;      if ((*pk1 & BITVL(k)) != 0)	{	  if ((*pk2 & BITVL(k)) != 0)	    {			/* both are defined */	      switch ((df + afn[kk])->field_type)		{		case T1B:		  if ((v = f1b (kval1, kval2, size1b, size1b)) != 0)		    return (v * d);		  kval1++;		  kval2++;		  break;		case T2B:		  if ((v = f2b (kval1, kval2, size2b, size2b)) != 0)		    return (v * d);		  kval1 += size2b;		  kval2 += size2b;		  break;		case T4B:		  if ((v = f4b (kval1, kval2, size4b, size4b)) != 0)		    return (v * d);		  kval1 += size4b;		  kval2 += size4b;		  break;		case TFLOAT:		  if ((v = flcmp (kval1, kval2, size4b, size4b)) != 0)		    return (v * d);		  kval1 += size4b;		  kval2 += size4b;		  break;		case TFL:		  n1 = t2bunpack (kval1);		  kval1 += size2b;		  n2 = t2bunpack (kval2);		  kval2 += size2b;		  		  if ((v = ffloat (kval1, kval2, n1, n2)) != 0)		    return (v * d);		  kval1 += n1;		  kval2 += n2;		  break;		case TCH:		  n1 = t2bunpack (kval1);		  kval1 += size2b;		  n2 = t2bunpack (kval2);		  kval2 += size2b;			  		  if ((v = chcmp (kval1, kval2, n1, n2)) != 0)		    return (v * d);		  kval1 += n1;		  kval2 += n2;		  break;		default:		  perror ("SRT.cmpkey: This data type doesn't exist");		  break;		}	    }	  else	    return (-1);	/* The second not defined */	}      else if ((*pk2 & BITVL(k)) != 0)	return (1);		/*The first isn't defined */    }  if (kk < kn)    {      if (pk1 == k1)	{	  if (pk2 == k2)	    return (0);	  else	    return (1);	}      else	return (-1);    }  return (0);}u2_t scscal (char *a){  char *c;  for (c = a; (*a & EOSC) == 0; a++);  return (a + 1 - c);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -