Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_tlsv12/sys/src/games/music/jukefs/catset.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <bio.h>
4
 
5
#include "object.h"
6
#include "catset.h"
7
 
8
static int debug = 0;
9
 
10
int
11
catsetneeded(int v)
12
{
13
	return (v / 8) + 1;
14
}
15
 
16
static void
17
catsetprint(int f, Catset*cs)
18
{
19
	int i;
20
	fprint(2, "(%p %d:", cs->bitpiece, cs->nbitpiece);
21
	for (i = 0; i < cs->nbitpiece; i++)
22
		fprint(f, "[%d]=%x", i, cs->bitpiece[i]);
23
	fprint(2, ")");
24
}
25
 
26
void
27
catsetrealloc(Catset *cs, int sz)
28
{
29
	if (debug) fprint(2, "catsetrealloc %p %d (%p %d)", cs, sz, cs->bitpiece, cs->nbitpiece);
30
	if (sz > cs->nbitpiece) {
31
		cs->bitpiece = realloc(cs->bitpiece, sz*sizeof(uchar));
32
		memset(cs->bitpiece + cs->nbitpiece, 0, sz - cs->nbitpiece);
33
		cs->nbitpiece = sz;
34
	}
35
	if (debug) fprint(2, " -> %p %d\n", cs->bitpiece, cs->nbitpiece);
36
}
37
 
38
void
39
catsetfree(Catset *cs)
40
{
41
	free(cs->bitpiece);
42
	cs->bitpiece = 0;
43
	cs->nbitpiece = 0;
44
}
45
 
46
void
47
catsetinit(Catset*cs, int v)
48
{
49
	int n;
50
 
51
	n = catsetneeded(v);
52
	if (debug) fprint(2, "catsetinit %p %d -> ", cs, v);
53
	catsetrealloc(cs, n);
54
	catsetset(cs, v);
55
	if (debug) catsetprint(2, cs);
56
	if (debug) fprint(2, "\n");
57
}
58
 
59
void
60
catsetcopy(Catset*dst, Catset*src)
61
{
62
	if (debug) fprint(2, "catsetcopy %p %p ", dst, src);
63
	if (debug) catsetprint(2, dst);
64
	if (debug) fprint(2, " ");
65
	if (debug) catsetprint(2, src);
66
	if (dst->nbitpiece < src->nbitpiece)
67
		catsetrealloc(dst, src->nbitpiece);
68
	else
69
		memset(dst->bitpiece, 0, dst->nbitpiece);
70
	memcpy(dst->bitpiece, src->bitpiece, src->nbitpiece);
71
	dst->nbitpiece = src->nbitpiece;
72
	if (debug) fprint(2, "-> ");
73
	if (debug) catsetprint(2, dst);
74
	if (debug) fprint(2, "\n");
75
}
76
 
77
void
78
catsetset(Catset*cs, int v)
79
{
80
	int p = v / 8;
81
	int b = v % 8;
82
	if (debug) fprint(2, "catsetset %p %d ", cs, v);
83
	if (debug) catsetprint(2, cs);
84
	cs->bitpiece[p] = 1 << b;
85
	if (debug) fprint(2, "-> ");
86
	if (debug) catsetprint(2, cs);
87
	if (debug) fprint(2, "\n");
88
}
89
 
90
int
91
catsetisset(Catset*cs)
92
{
93
	int i;
94
 
95
	if (debug) fprint(2, "catsetisset %p ", cs);
96
	if (debug) catsetprint(2, cs);
97
	if (debug) fprint(2, "\n");
98
	for (i =0; i < cs->nbitpiece; i++) {
99
		if (cs->bitpiece[i])
100
			return 1;
101
	}
102
	return 0;
103
}
104
 
105
void
106
catsetorset(Catset*dst, Catset*src)
107
{
108
	int i;
109
 
110
	if (debug) fprint(2, "catsetorset %p %p ", dst, src);
111
	if (debug) catsetprint(2, dst);
112
	if (debug) fprint(2, " ");
113
	if (debug) catsetprint(2, src);
114
	if (src->nbitpiece > dst->nbitpiece)
115
		catsetrealloc(dst, src->nbitpiece);
116
 
117
	for (i =0; i < src->nbitpiece; i++) {
118
		dst->bitpiece[i] |= src->bitpiece[i];
119
	}
120
	if (debug) fprint(2, "-> ");
121
	if (debug) catsetprint(2, dst);
122
	if (debug) fprint(2, "\n");
123
}
124
 
125
int
126
catseteq(Catset*cs1, Catset*cs2)
127
{
128
	int i;
129
	Catset *css, * csl;
130
 
131
	if (debug) fprint(2, "catseteq %p %p ", cs1, cs2);
132
	if (debug) catsetprint(2, cs1);
133
	if (debug) fprint(2, " ");
134
	if (debug) catsetprint(2, cs2);
135
	if (debug) fprint(2, "\n");
136
	if (cs1->nbitpiece > cs2->nbitpiece) {
137
		csl = cs1;
138
		css = cs2;
139
	} else {
140
		csl = cs2;
141
		css = cs1;
142
	}
143
	for (i =0; i < css->nbitpiece; i++) {
144
		if (css->bitpiece[i] != csl->bitpiece[i])
145
			return 0;
146
	}
147
	for (i = css->nbitpiece; i < csl->nbitpiece; i++) {
148
		if (csl->bitpiece[i])
149
			return 0;
150
	}
151
	return 1;
152
}