📄 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 + -