Go to the source code of this file.
|
| ABC_NAMESPACE_IMPL_START bool | full_row (IN register pcube p, IN register pcube cof) |
| |
| bool | cdist0 (pcube a, pcube b) |
| |
| int | cdist01 (pset a, pset b) |
| |
| int | cdist (pset a, pset b) |
| |
| pset | force_lower (INOUT pset xlower, IN register pset a, IN register pset b) |
| |
| void | consensus (INOUT pcube r, IN register pcube a, IN register pcube b) |
| |
| int | cactive (pcube a) |
| |
| bool | ccommon (pcube a, pcube b, pcube cof) |
| |
| int | descend (pset *a, pset *b) |
| |
| int | ascend (pset *a, pset *b) |
| |
| int | lex_order (pset *a, pset *b) |
| |
| int | d1_order (pset *a, pset *b) |
| |
| int | desc1 (pset a, pset b) |
| |
◆ ascend()
Definition at line 423 of file setc.c.
425{
429 else {
430 register int i =
LOOP(
a1);
431 do
432 if (
a1[i] >
b1[i])
return 1;
else if (
a1[i] <
b1[i])
return -1;
433 while (--i > 0);
434 }
435 return 0;
436}
◆ cactive()
Definition at line 293 of file setc.c.
295{
297
298 {
299 register int w, last;
300 register unsigned int x;
301 if ((last =
cube.inword) != -1) {
302
303
304 x = a[last];
305 if ((x = ~ (x & x >> 1) &
cube.inmask)) {
307 return -1;
309 }
310
311
312 for(w = 1; w < last; w++) {
313 x = a[w];
314 if ((x = ~ (x & x >> 1) &
DISJOINT)) {
316 return -1;
318 }
319 }
320 }
321 }
322
323 {
324 register int w,
var, last;
326 for(var =
cube.num_binary_vars; var <
cube.num_vars; var++) {
329 for(w =
cube.first_word[var]; w <= last; w++)
330 if (mask[w] & ~ a[w]) {
331 if (++dist > 1)
332 return -1;
334 break;
335 }
336 }
337 }
338 return active;
339}
◆ ccommon()
Definition at line 346 of file setc.c.
348{
349 {
350 int last;
351 register int w;
352 register unsigned int x, y;
353 if ((last =
cube.inword) != -1) {
354
355
356 x = a[last] | cof[last];
357 y = b[last] | cof[last];
358 if (~(x & x>>1) & ~(y & y>>1) &
cube.inmask)
360
361
362 for(w = 1; w < last; w++) {
363 x = a[w] | cof[w];
364 y = b[w] | cof[w];
365 if (~(x & x>>1) & ~(y & y>>1) &
DISJOINT)
367 }
368 }
369 }
370
371 {
373 register int w, last;
375 for(var =
cube.num_binary_vars; var <
cube.num_vars; var++) {
377
378 for(w =
cube.first_word[var]; w <= last; w++)
379 if (mask[w] & ~a[w] & ~cof[w]) {
380
381
382 for(w =
cube.first_word[var]; w <= last; w++)
383 if (mask[w] & ~b[w] & ~cof[w])
385 break;
386 }
387 }
388 }
390}
◆ cdist()
Definition at line 154 of file setc.c.
156{
157 int dist = 0;
158
159 {
160 register int w, last; register unsigned int x;
161 if ((last =
cube.inword) != -1) {
162
163
164 x = a[last] & b[last];
165 if ((x = ~ (x | x >> 1) &
cube.inmask))
167
168
169 for(w = 1; w < last; w++) {
170 x = a[w] & b[w];
171 if ((x = ~ (x | x >> 1) &
DISJOINT))
173 }
174 }
175 }
176
177 {
178 register int w,
var, last;
register pcube mask;
179 for(var =
cube.num_binary_vars; var <
cube.num_vars; var++) {
181 for(w =
cube.first_word[var]; w <= last; w++)
182 if (a[w] & b[w] & mask[w])
183 goto nextvar;
184 dist++;
185 nextvar: ;
186 }
187 }
188 return dist;
189}
◆ cdist0()
Definition at line 68 of file setc.c.
70{
71 {
72 register int w, last; register unsigned int x;
73 if ((last =
cube.inword) != -1) {
74
75
76 x = a[last] & b[last];
77 if (~(x | x >> 1) &
cube.inmask)
79
80
81 for(w = 1; w < last; w++) {
82 x = a[w] & b[w];
85 }
86 }
87 }
88
89 {
90 register int w,
var, last;
register pcube mask;
91 for(var =
cube.num_binary_vars; var <
cube.num_vars; var++) {
93 for(w =
cube.first_word[var]; w <= last; w++)
94 if (a[w] & b[w] & mask[w])
95 goto nextvar;
97 nextvar: ;
98 }
99 }
101}
◆ cdist01()
Definition at line 109 of file setc.c.
111{
112 int dist = 0;
113
114 {
115 register int w, last; register unsigned int x;
116 if ((last =
cube.inword) != -1) {
117
118
119 x = a[last] & b[last];
120 if ((x = ~ (x | x >> 1) &
cube.inmask))
122 return 2;
123
124
125 for(w = 1; w < last; w++) {
126 x = a[w] & b[w];
127 if ((x = ~ (x | x >> 1) &
DISJOINT))
129 return 2;
130 }
131 }
132 }
133
134 {
135 register int w,
var, last;
register pcube mask;
136 for(var =
cube.num_binary_vars; var <
cube.num_vars; var++) {
138 for(w =
cube.first_word[var]; w <= last; w++)
139 if (a[w] & b[w] & mask[w])
140 goto nextvar;
141 if (++dist > 1)
142 return 2;
143 nextvar: ;
144 }
145 }
146 return dist;
147}
◆ consensus()
Definition at line 246 of file setc.c.
249{
251
252 {
253 register int w, last; register unsigned int x;
254 if ((last =
cube.inword) != -1) {
255
256
257 r[last] = x = a[last] & b[last];
258 if ((x = ~(x | x >> 1) &
cube.inmask))
259 r[last] |= (x | (x << 1)) & (a[last] | b[last]);
260
261
262 for(w = 1; w < last; w++) {
263 r[w] = x = a[w] & b[w];
265 r[w] |= (x | (x << 1)) & (a[w] | b[w]);
266 }
267 }
268 }
269
270
271 {
272 bool empty;
int var;
unsigned int x;
273 register int w, last;
register pcube mask;
274 for(var =
cube.num_binary_vars; var <
cube.num_vars; var++) {
278 for(w =
cube.first_word[var]; w <= last; w++)
279 if ((x = a[w] & b[w] & mask[w]))
280 empty =
FALSE, r[w] |= x;
281 if (empty)
282 for(w =
cube.first_word[var]; w <= last; w++)
283 r[w] |= mask[w] & (a[w] | b[w]);
284 }
285 }
286}
#define INLINEset_clear(r, size)
◆ d1_order()
Definition at line 453 of file setc.c.
455{
457 register int i =
LOOP(
a1);
458 register unsigned int x1, x2;
459 do
460 if ((x1 =
a1[i] | c1[i]) > (x2 =
b1[i] | c1[i]))
return -1;
461 else if (x1 < x2) return 1;
462 while (--i > 0);
463 return 0;
464}
◆ desc1()
Definition at line 470 of file setc.c.
472{
473 if (a == (
pset) NULL)
474 return (b == (
pset) NULL) ? 0 : 1;
475 else if (b == (
pset) NULL)
476 return -1;
478 else if (
SIZE(a) <
SIZE(b))
return 1;
479 else {
480 register int i =
LOOP(a);
481 do
482 if (a[i] > b[i]) return -1; else if (a[i] < b[i]) return 1;
483 while (--i > 0);
484 }
485 return 0;
486}
◆ descend()
Definition at line 407 of file setc.c.
409{
413 else {
414 register int i =
LOOP(
a1);
415 do
416 if (
a1[i] >
b1[i])
return -1;
else if (
a1[i] <
b1[i])
return 1;
417 while (--i > 0);
418 }
419 return 0;
420}
◆ force_lower()
Definition at line 195 of file setc.c.
198{
199
200 {
201 register int w, last; register unsigned int x;
202 if ((last =
cube.inword) != -1) {
203
204
205 x = a[last] & b[last];
206 if ((x = ~(x | x >> 1) &
cube.inmask))
207 xlower[last] |= (x | (x << 1)) & a[last];
208
209
210 for(w = 1; w < last; w++) {
211 x = a[w] & b[w];
213 xlower[w] |= (x | (x << 1)) & a[w];
214 }
215 }
216 }
217
218 {
219 register int w,
var, last;
register pcube mask;
220 for(var =
cube.num_binary_vars; var <
cube.num_vars; var++) {
222 for(w =
cube.first_word[var]; w <= last; w++)
223 if (a[w] & b[w] & mask[w])
224 goto nextvar;
225 for(w =
cube.first_word[var]; w <= last; w++)
226 xlower[w] |= a[w] & mask[w];
227 nextvar: ;
228 }
229 }
230 return xlower;
231}
◆ full_row()
Definition at line 56 of file setc.c.
58{
59 register int i =
LOOP(
p);
60 do if ((
p[i] | cof[i]) !=
cube.fullset[i])
return FALSE;
while (--i > 0);
62}
◆ lex_order()
Definition at line 440 of file setc.c.
442{
444 register int i =
LOOP(
a1);
445 do
446 if (
a1[i] >
b1[i])
return -1;
else if (
a1[i] <
b1[i])
return 1;
447 while (--i > 0);
448 return 0;
449}