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

📄 vbitset.c

📁 GNU的词法/语法分析器bison源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	  *dstp = 0;	}    }  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));  return changed;}static voidvbitset_andn (bitset dst, bitset src1, bitset src2){  unsigned int i;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *dstp;  bitset_windex ssize1;  bitset_windex ssize2;  bitset_windex dsize;  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));  dsize = VBITSET_SIZE (dst);  ssize1 = VBITSET_SIZE (src1);  ssize2 = VBITSET_SIZE (src2);  dstp = VBITSET_WORDS (dst);  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  for (i = 0; i < min (ssize1, ssize2); i++)      *dstp++ = *src1p++ & ~(*src2p++);  if (ssize2 > ssize1)    {      for (; i < ssize2; i++)	*dstp++ = 0;      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize2));    }  else    {      for (; i < ssize1; i++)	*dstp++ = *src1p++;      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));    }}static boolvbitset_andn_cmp (bitset dst, bitset src1, bitset src2){  unsigned int i;  int changed = 0;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *dstp;  bitset_windex ssize1;  bitset_windex ssize2;  bitset_windex dsize;  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));  dsize = VBITSET_SIZE (dst);  ssize1 = VBITSET_SIZE (src1);  ssize2 = VBITSET_SIZE (src2);  dstp = VBITSET_WORDS (dst);  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)    {      bitset_word tmp = *src1p++ & ~(*src2p++);      if (*dstp != tmp)	{	  changed = 1;	  *dstp = tmp;	}    }  if (ssize2 > ssize1)    {      for (; i < ssize2; i++, dstp++)	{	  if (*dstp != 0)	    {	      changed = 1;	      *dstp = 0;	    }	}      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize2));    }  else    {      for (; i < ssize1; i++, dstp++)	{	  bitset_word tmp = *src1p++;	  if (*dstp != tmp)	    {	      changed = 1;	      *dstp = tmp;	    }	}      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));    }  return changed;}static voidvbitset_or (bitset dst, bitset src1, bitset src2){  unsigned int i;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *dstp;  bitset_windex ssize1;  bitset_windex ssize2;  bitset_windex dsize;  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));  dsize = VBITSET_SIZE (dst);  ssize1 = VBITSET_SIZE (src1);  ssize2 = VBITSET_SIZE (src2);  dstp = VBITSET_WORDS (dst);  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  for (i = 0; i < min (ssize1, ssize2); i++)      *dstp++ = *src1p++ | *src2p++;  if (ssize2 > ssize1)    {      src1p = src2p;      ssize1 = ssize2;    }  for (; i < ssize1; i++)    *dstp++ = *src1p++;  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));}static boolvbitset_or_cmp (bitset dst, bitset src1, bitset src2){  unsigned int i;  int changed = 0;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *dstp;  bitset_windex ssize1;  bitset_windex ssize2;  bitset_windex dsize;  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));  dsize = VBITSET_SIZE (dst);  ssize1 = VBITSET_SIZE (src1);  ssize2 = VBITSET_SIZE (src2);  dstp = VBITSET_WORDS (dst);  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)    {      bitset_word tmp = *src1p++ | *src2p++;      if (*dstp != tmp)	{	  changed = 1;	  *dstp = tmp;	}    }  if (ssize2 > ssize1)    {      src1p = src2p;      ssize1 = ssize2;    }  for (; i < ssize1; i++, dstp++)    {      bitset_word tmp = *src1p++;      if (*dstp != tmp)	{	  changed = 1;	  *dstp = tmp;	}    }  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));  return changed;}static voidvbitset_xor (bitset dst, bitset src1, bitset src2){  unsigned int i;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *dstp;  bitset_windex ssize1;  bitset_windex ssize2;  bitset_windex dsize;  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));  dsize = VBITSET_SIZE (dst);  ssize1 = VBITSET_SIZE (src1);  ssize2 = VBITSET_SIZE (src2);  dstp = VBITSET_WORDS (dst);  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  for (i = 0; i < min (ssize1, ssize2); i++)      *dstp++ = *src1p++ ^ *src2p++;  if (ssize2 > ssize1)    {      src1p = src2p;      ssize1 = ssize2;    }  for (; i < ssize1; i++)    *dstp++ = *src1p++;  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));}static boolvbitset_xor_cmp (bitset dst, bitset src1, bitset src2){  unsigned int i;  int changed = 0;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *dstp;  bitset_windex ssize1;  bitset_windex ssize2;  bitset_windex dsize;  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));  dsize = VBITSET_SIZE (dst);  ssize1 = VBITSET_SIZE (src1);  ssize2 = VBITSET_SIZE (src2);  dstp = VBITSET_WORDS (dst);  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)    {      bitset_word tmp = *src1p++ ^ *src2p++;      if (*dstp != tmp)	{	  changed = 1;	  *dstp = tmp;	}    }  if (ssize2 > ssize1)    {      src1p = src2p;      ssize1 = ssize2;    }  for (; i < ssize1; i++, dstp++)    {      bitset_word tmp = *src1p++;      if (*dstp != tmp)	{	  changed = 1;	  *dstp = tmp;	}    }  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));  return changed;}/* FIXME, these operations need fixing for different size   bitsets.  */static voidvbitset_and_or (bitset dst, bitset src1, bitset src2, bitset src3){  unsigned int i;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *src3p;  bitset_word *dstp;  bitset_windex size;  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))    {      bitset_and_or_ (dst, src1, src2, src3);      return;    }  vbitset_resize (dst, BITSET_NBITS_ (src1));  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  src3p = VBITSET_WORDS (src3);  dstp = VBITSET_WORDS (dst);  size = VBITSET_SIZE (dst);  for (i = 0; i < size; i++)      *dstp++ = (*src1p++ & *src2p++) | *src3p++;}static boolvbitset_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3){  unsigned int i;  int changed = 0;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *src3p;  bitset_word *dstp;  bitset_windex size;  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))    return bitset_and_or_cmp_ (dst, src1, src2, src3);  vbitset_resize (dst, BITSET_NBITS_ (src1));  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  src3p = VBITSET_WORDS (src3);  dstp = VBITSET_WORDS (dst);  size = VBITSET_SIZE (dst);  for (i = 0; i < size; i++, dstp++)    {      bitset_word tmp = (*src1p++ & *src2p++) | *src3p++;      if (*dstp != tmp)	{	  changed = 1;	  *dstp = tmp;	}    }  return changed;}static voidvbitset_andn_or (bitset dst, bitset src1, bitset src2, bitset src3){  unsigned int i;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *src3p;  bitset_word *dstp;  bitset_windex size;  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))    {      bitset_andn_or_ (dst, src1, src2, src3);      return;    }  vbitset_resize (dst, BITSET_NBITS_ (src1));  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  src3p = VBITSET_WORDS (src3);  dstp = VBITSET_WORDS (dst);  size = VBITSET_SIZE (dst);  for (i = 0; i < size; i++)      *dstp++ = (*src1p++ & ~(*src2p++)) | *src3p++;}static boolvbitset_andn_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3){  unsigned int i;  int changed = 0;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *src3p;  bitset_word *dstp;  bitset_windex size;  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))    return bitset_andn_or_cmp_ (dst, src1, src2, src3);  vbitset_resize (dst, BITSET_NBITS_ (src1));  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  src3p = VBITSET_WORDS (src3);  dstp = VBITSET_WORDS (dst);  size = VBITSET_SIZE (dst);  for (i = 0; i < size; i++, dstp++)    {      bitset_word tmp = (*src1p++ & ~(*src2p++)) | *src3p++;      if (*dstp != tmp)	{	  changed = 1;	  *dstp = tmp;	}    }  return changed;}static voidvbitset_or_and (bitset dst, bitset src1, bitset src2, bitset src3){  unsigned int i;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *src3p;  bitset_word *dstp;  bitset_windex size;  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))    {      bitset_or_and_ (dst, src1, src2, src3);      return;    }  vbitset_resize (dst, BITSET_NBITS_ (src1));  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  src3p = VBITSET_WORDS (src3);  dstp = VBITSET_WORDS (dst);  size = VBITSET_SIZE (dst);  for (i = 0; i < size; i++)      *dstp++ = (*src1p++ | *src2p++) & *src3p++;}static boolvbitset_or_and_cmp (bitset dst, bitset src1, bitset src2, bitset src3){  unsigned int i;  int changed = 0;  bitset_word *src1p;  bitset_word *src2p;  bitset_word *src3p;  bitset_word *dstp;  bitset_windex size;  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))    return bitset_or_and_cmp_ (dst, src1, src2, src3);  vbitset_resize (dst, BITSET_NBITS_ (src1));  src1p = VBITSET_WORDS (src1);  src2p = VBITSET_WORDS (src2);  src3p = VBITSET_WORDS (src3);  dstp = VBITSET_WORDS (dst);  size = VBITSET_SIZE (dst);  for (i = 0; i < size; i++, dstp++)    {      bitset_word tmp = (*src1p++ | *src2p++) & *src3p++;      if (*dstp != tmp)	{	  changed = 1;	  *dstp = tmp;	}    }  return changed;}static voidvbitset_copy (bitset dst, bitset src){  if (BITSET_COMPATIBLE_ (dst, src))      vbitset_copy1 (dst, src);  else      bitset_copy_ (dst, src);}/* Vector of operations for multiple word bitsets.  */struct bitset_vtable vbitset_vtable = {  vbitset_set,  vbitset_reset,  bitset_toggle_,  vbitset_test,  vbitset_resize,  bitset_size_,  bitset_count_,  vbitset_empty_p,  vbitset_ones,  vbitset_zero,  vbitset_copy,  vbitset_disjoint_p,  vbitset_equal_p,  vbitset_not,  vbitset_subset_p,  vbitset_and,  vbitset_and_cmp,  vbitset_andn,  vbitset_andn_cmp,  vbitset_or,  vbitset_or_cmp,  vbitset_xor,  vbitset_xor_cmp,  vbitset_and_or,  vbitset_and_or_cmp,  vbitset_andn_or,  vbitset_andn_or_cmp,  vbitset_or_and,  vbitset_or_and_cmp,  vbitset_list,  vbitset_list_reverse,  NULL,  BITSET_VARRAY};size_tvbitset_bytes (n_bits)     bitset_bindex n_bits ATTRIBUTE_UNUSED;{  return sizeof (struct vbitset_struct);}bitsetvbitset_init (bset, n_bits)     bitset bset;     bitset_bindex n_bits;{  bset->b.vtable = &vbitset_vtable;  bset->b.cindex = 0;  VBITSET_SIZE (bset) = 0;  vbitset_resize (bset, n_bits);  return bset;}

⌨️ 快捷键说明

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