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