📄 bitvector.c
字号:
/***********************************************************************bitvector.c - some routines for dealing with bitvectorsCopyright (C) 1991 Dean RubineThis program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License. See ../COPYING forthe full agreement. **********************************************************************//*LINTLIBRARY*/#include "util.h"#undef BITS_PER_VECTOR#define BITS_PER_VECTOR 128#include "bitvector.h"/* ari -- for strlen */#include <string.h> intbitcount(max, bv)int max;BitVector bv;{ register int i, count; for(count = i = 0; i < max; i++) if(IS_SET(i, bv)) count++; return count;}char *BitVectorToString(max, bv)BitVector bv;{ char *string = tempstring(); register int i; for(i = 0; i < max; i++) string[i] = IS_SET(i, bv) ? (i % 10) + '0' : '-' ; string[i] = '\0'; return string;}voidStringToBitVector(string, max, bv)char *string;int max;BitVector bv;{ register int i;/* ari -- strlen returns a size_t, which depends on which OS you've got */ if((int) strlen(string) != max) { error("StringToBitVector: strlen(%s)=%d != %d", string, (int) strlen(string), max); return; } for(i = 0; i < max; i++) if(string[i] != '-') BIT_SET(i, bv); else BIT_CLEAR(i, bv); }voidSetBitVector(v)register BitVector v;{ register int nints = INTS_PER_VECTOR; while(--nints >= 0) *v++ = -1;}voidClearBitVector(nints, v)register int nints;register BitVector v;{ while(--nints >= 0) *v++ = 0;}voidAssignBitVector(nints, v1, v2)register int nints;register BitVector v1, v2;{ while(--nints >= 0) *v1++ = *v2++;}intBitVectorDeQ(max, v)register int max;register BitVector v;{ register int i; for(i = 0; i < max; i++) if(IS_SET(i, v)) { BIT_CLEAR(i, v); return i; } return -1;}int *BitVectorOr(v, v1, v2, ipv)int *v;register int *v1, *v2;register int ipv;{ int *vv = v; do *vv++ = *v1++ | *v2++; while(--ipv > 0); return v;}int *BitVectorAnd(v, v1, v2, ipv)int *v;register int *v1, *v2;register int ipv;{ int *vv = v; do *vv++ = *v1++ & *v2++; while(--ipv > 0); return v;}intBitVectorNoBitsSet(v, ipv)register int *v;register int ipv;{ do if(*v++) return 0; while(--ipv > 0); return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -