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

📄 hideset.c

📁 c语言编译器
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "cpp.h"/* * A hideset is a null-terminated array of Nlist pointers. * They are referred to by indices in the hidesets array. * Hideset 0 is empty. */#define	HSSIZ	32typedef	Nlist	**Hideset;Hideset	*hidesets;int	nhidesets = 0;int	maxhidesets = 3;int	inserths(Hideset, Hideset, Nlist *);/* * Test for membership in a hideset */intcheckhideset(int hs, Nlist *np){	Hideset hsp;	if (hs>=nhidesets)		abort();	for (hsp = hidesets[hs]; *hsp; hsp++) {		if (*hsp == np)			return 1;	}	return 0;}/* * Return the (possibly new) hideset obtained by adding np to hs. */intnewhideset(int hs, Nlist *np){	int i, len;	Nlist *nhs[HSSIZ+3];	Hideset hs1, hs2;	len = inserths(nhs, hidesets[hs], np);	for (i=0; i<nhidesets; i++) {		for (hs1=nhs, hs2=hidesets[i]; *hs1==*hs2; hs1++, hs2++)			if (*hs1 == NULL)				return i;	}	if (len>=HSSIZ)		return hs;	if (nhidesets >= maxhidesets) {		maxhidesets = 3*maxhidesets/2+1;		hidesets = (Hideset *)realloc(hidesets, (sizeof (Hideset *))*maxhidesets);		if (hidesets == NULL)			error(FATAL, "Out of memory from realloc");	}	hs1 = (Hideset)domalloc(len*sizeof *hs1);	memmove(hs1, nhs, len*sizeof *hs1);	hidesets[nhidesets] = hs1;	return nhidesets++;}intinserths(Hideset dhs, Hideset shs, Nlist *np){	Hideset odhs = dhs;	while (*shs && *shs < np)		*dhs++ = *shs++;	if (*shs != np)		*dhs++ = np;	do {		*dhs++ = *shs;	} while (*shs++);	return dhs - odhs;}/* * Hideset union */intunionhideset(int hs1, int hs2){	Hideset hp;	for (hp = hidesets[hs2]; *hp; hp++)		hs1 = newhideset(hs1, *hp);	return hs1;}voidiniths(void){	hidesets = (Hideset *)domalloc(maxhidesets*sizeof(Hideset *));	hidesets[0] = (Hideset)domalloc(sizeof *hidesets[0]);	*hidesets[0] = NULL;	nhidesets++;}voidprhideset(int hs){	Hideset np;	for (np = hidesets[hs]; *np; np++) {		fprintf(stderr, (char*)(*np)->name, (*np)->len);		fprintf(stderr, " ");	}}

⌨️ 快捷键说明

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