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

📄 bitsetv.c

📁 bison 2.0 主要可以用来做语法分析用的
💻 C
字号:
/* Bitset vectors.   Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.This file is part of GCC.GCC is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.GCC is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public Licensealong with GCC; see the file COPYING.  If not, write to the FreeSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA.  */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <stdlib.h>#include "bitsetv.h"/* Create a vector of N_VECS bitsets, each of N_BITS, and of   type TYPE.  */bitset *bitsetv_alloc (bitset_bindex n_vecs, bitset_bindex n_bits,	       enum bitset_type type){  size_t vector_bytes;  size_t bytes;  bitset *bsetv;  bitset_bindex i;  /* Determine number of bytes for each set.  */  bytes = bitset_bytes (type, n_bits);  /* If size calculation overflows, memory is exhausted.  */  if (BITSET_SIZE_MAX / (sizeof (bitset) + bytes) <= n_vecs)    xalloc_die ();  /* Allocate vector table at head of bitset array.  */  vector_bytes = (n_vecs + 1) * sizeof (bitset) + bytes - 1;  vector_bytes -= vector_bytes % bytes;  bsetv = (bitset *) xcalloc (1, vector_bytes + bytes * n_vecs);  for (i = 0; i < n_vecs; i++)    {      bsetv[i] = (bitset) (void *) ((char *) bsetv + vector_bytes + i * bytes);      bitset_init (bsetv[i], n_bits, type);    }  /* Null terminate table.  */  bsetv[i] = 0;  return bsetv;}/* Create a vector of N_VECS bitsets, each of N_BITS, and with   attribute hints specified by ATTR.  */bitset *bitsetv_create (bitset_bindex n_vecs, bitset_bindex n_bits, unsigned int attr){  enum bitset_type type;  type = bitset_type_choose (n_bits, attr);  return bitsetv_alloc (n_vecs, n_bits, type);}/* Free bitset vector BSETV.  */voidbitsetv_free (bitsetv bsetv){  bitset_bindex i;  for (i = 0; bsetv[i]; i++)      BITSET_FREE_ (bsetv[i]);  free (bsetv);}/* Zero a vector of bitsets.  */voidbitsetv_zero (bitsetv bsetv){  bitset_bindex i;  for (i = 0; bsetv[i]; i++)    bitset_zero (bsetv[i]);}/* Set a vector of bitsets to ones.  */voidbitsetv_ones (bitsetv bsetv){  bitset_bindex i;  for (i = 0; bsetv[i]; i++)    bitset_ones (bsetv[i]);}/* Given a vector BSETV of N bitsets of size N, modify its contents to   be the transitive closure of what was given.  */voidbitsetv_transitive_closure (bitsetv bsetv){  bitset_bindex i;  bitset_bindex j;  for (i = 0; bsetv[i]; i++)    for (j = 0; bsetv[j]; j++)      if (bitset_test (bsetv[j], i))	bitset_or (bsetv[j], bsetv[j], bsetv[i]);}/* Given a vector BSETV of N bitsets of size N, modify its contents to   be the reflexive transitive closure of what was given.  This is   the same as transitive closure but with all bits on the diagonal   of the bit matrix set.  */voidbitsetv_reflexive_transitive_closure (bitsetv bsetv){  bitset_bindex i;  bitsetv_transitive_closure (bsetv);  for (i = 0; bsetv[i]; i++)    bitset_set (bsetv[i], i);}/* Dump the contents of a bitset vector BSETV with N_VECS elements to   FILE.  */voidbitsetv_dump (FILE *file, char const *title, char const *subtitle,	      bitsetv bsetv){  bitset_windex i;  fprintf (file, "%s\n", title);  for (i = 0; bsetv[i]; i++)    {      fprintf (file, "%s %lu\n", subtitle, (unsigned long int) i);      bitset_dump (file, bsetv[i]);    }  fprintf (file, "\n");}voiddebug_bitsetv (bitsetv bsetv){  bitset_windex i;  for (i = 0; bsetv[i]; i++)    {      fprintf (stderr, "%lu: ", (unsigned long int) i);      debug_bitset (bsetv[i]);    }  fprintf (stderr, "\n");}

⌨️ 快捷键说明

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