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

📄 bitvector.c

📁 神龙卡开发原代码
💻 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 + -