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

📄 catset.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include "object.h"#include "catset.h"static int debug = 0;intcatsetneeded(int v){	return (v / 8) + 1;}static voidcatsetprint(int f, Catset*cs){	int i;	fprint(2, "(%p %d:", cs->bitpiece, cs->nbitpiece);	for (i = 0; i < cs->nbitpiece; i++)		fprint(f, "[%d]=%x", i, cs->bitpiece[i]);	fprint(2, ")");}voidcatsetrealloc(Catset *cs, int sz){	if (debug) fprint(2, "catsetrealloc %p %d (%p %d)", cs, sz, cs->bitpiece, cs->nbitpiece);	if (sz > cs->nbitpiece) {		cs->bitpiece = realloc(cs->bitpiece, sz*sizeof(uchar));		memset(cs->bitpiece + cs->nbitpiece, 0, sz - cs->nbitpiece);		cs->nbitpiece = sz;	}	if (debug) fprint(2, " -> %p %d\n", cs->bitpiece, cs->nbitpiece);}voidcatsetfree(Catset *cs){	free(cs->bitpiece);	cs->bitpiece = 0;	cs->nbitpiece = 0;}voidcatsetinit(Catset*cs, int v){	int n;	n = catsetneeded(v);	if (debug) fprint(2, "catsetinit %p %d -> ", cs, v);	catsetrealloc(cs, n);	catsetset(cs, v);	if (debug) catsetprint(2, cs);	if (debug) fprint(2, "\n");}voidcatsetcopy(Catset*dst, Catset*src){	if (debug) fprint(2, "catsetcopy %p %p ", dst, src);	if (debug) catsetprint(2, dst);	if (debug) fprint(2, " ");	if (debug) catsetprint(2, src);	if (dst->nbitpiece < src->nbitpiece)		catsetrealloc(dst, src->nbitpiece);	else		memset(dst->bitpiece, 0, dst->nbitpiece);	memcpy(dst->bitpiece, src->bitpiece, src->nbitpiece);	dst->nbitpiece = src->nbitpiece;	if (debug) fprint(2, "-> ");	if (debug) catsetprint(2, dst);	if (debug) fprint(2, "\n");}voidcatsetset(Catset*cs, int v){	int p = v / 8;	int b = v % 8;	if (debug) fprint(2, "catsetset %p %d ", cs, v);	if (debug) catsetprint(2, cs);	cs->bitpiece[p] = 1 << b;	if (debug) fprint(2, "-> ");	if (debug) catsetprint(2, cs);	if (debug) fprint(2, "\n");}intcatsetisset(Catset*cs){	int i;	if (debug) fprint(2, "catsetisset %p ", cs);	if (debug) catsetprint(2, cs);	if (debug) fprint(2, "\n");	for (i =0; i < cs->nbitpiece; i++) {		if (cs->bitpiece[i])			return 1;	}	return 0;}voidcatsetorset(Catset*dst, Catset*src){	int i;	if (debug) fprint(2, "catsetorset %p %p ", dst, src);	if (debug) catsetprint(2, dst);	if (debug) fprint(2, " ");	if (debug) catsetprint(2, src);	if (src->nbitpiece > dst->nbitpiece)		catsetrealloc(dst, src->nbitpiece);	for (i =0; i < src->nbitpiece; i++) {		dst->bitpiece[i] |= src->bitpiece[i];	}	if (debug) fprint(2, "-> ");	if (debug) catsetprint(2, dst);	if (debug) fprint(2, "\n");}intcatseteq(Catset*cs1, Catset*cs2){	int i;	Catset *css, * csl;	if (debug) fprint(2, "catseteq %p %p ", cs1, cs2);	if (debug) catsetprint(2, cs1);	if (debug) fprint(2, " ");	if (debug) catsetprint(2, cs2);	if (debug) fprint(2, "\n");	if (cs1->nbitpiece > cs2->nbitpiece) {		csl = cs1;		css = cs2;	} else {		csl = cs2;		css = cs1;	}	for (i =0; i < css->nbitpiece; i++) {		if (css->bitpiece[i] != csl->bitpiece[i])			return 0;	}	for (i = css->nbitpiece; i < csl->nbitpiece; i++) {		if (csl->bitpiece[i])			return 0;	}	return 1;}

⌨️ 快捷键说明

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