Go to the source code of this file.
|
| ABC_NAMESPACE_IMPL_START pset_family | sf_contain (INOUT pset_family A) |
| |
| pset_family | sf_rev_contain (INOUT pset_family A) |
| |
| pset_family | sf_ind_contain (INOUT pset_family A, INOUT int *row_indices) |
| |
| pset_family | sf_dupl (INOUT pset_family A) |
| |
| pset_family | sf_union (INOUT pset_family A, INOUT pset_family B) |
| |
| pset_family | dist_merge (INOUT pset_family A, IN pset mask) |
| |
| pset_family | d1merge (INOUT pset_family A, IN int var) |
| |
| int | d1_rm_equal (pset *A1, int *compare) |
| |
| int | rm_equal (INOUT pset *A1, IN int *compare) |
| |
| int | rm_contain (INOUT pset *A1) |
| |
| int | rm_rev_contain (INOUT pset *A1) |
| |
| int | rm2_equal (INOUT register pset *A1, INOUT register pset *B1, OUT pset *E1, IN int *compare) |
| |
| int | rm2_contain (INOUT pset *A1, IN pset *B1) |
| |
| pset * | sf_sort (IN pset_family A, IN int *compare) |
| |
| pset * | sf_list (IN register pset_family A) |
| |
| pset_family | sf_unlist (IN pset *A1, IN int totcnt, IN int size) |
| |
| pset_family | sf_ind_unlist (IN pset *A1, IN int totcnt, IN int size, INOUT int *row_indices, IN register pset pfirst) |
| |
| pset_family | sf_merge (INOUT pset *A1, INOUT pset *B1, INOUT pset *E1, IN int totcnt, IN int size) |
| |
◆ d1_rm_equal()
| int d1_rm_equal |
( |
pset * | A1, |
|
|
int * | compare ) |
Definition at line 171 of file contain.c.
174{
175 register int i, j, dest;
176
177 dest = 0;
178 if (A1[0] != (
pcube) NULL) {
179 for(i = 0, j = 1; A1[j] != (
pcube) NULL; j++)
180 if ( (*compare)(&A1[i], &A1[j]) == 0) {
181
182 (void)
set_or(A1[i], A1[i], A1[j]);
183 } else {
184
185 A1[dest++] = A1[i];
186 i = j;
187 }
188 A1[dest++] = A1[i];
189 }
190 A1[dest] = (
pcube) NULL;
191 return dest;
192}
◆ d1merge()
◆ dist_merge()
Definition at line 141 of file contain.c.
144{
146 int cnt;
148
154 return R;
155}
struct set_family * pset_family
◆ rm2_contain()
Definition at line 304 of file contain.c.
307{
308 register pset *pa, *pb, a, b, *pdest = A1;
309
310
311 for(pa = A1; (a = *pa++) != NULL; ) {
312
313 for(pb = B1; (b = *pb++) != NULL &&
SIZE(b) >
SIZE(a); ) {
315
316 goto lnext1;
317 }
318
319 *pdest++ = a;
320 lnext1: ;
321 }
322
323 *pdest = NULL;
324 return pdest - A1;
325}
#define INLINEsetp_implies(a, b, when_false)
◆ rm2_equal()
Definition at line 274 of file contain.c.
278{
279 register pset *pda = A1, *pdb = B1, *pde = E1;
280
281
282 for(; *A1 != NULL && *B1 != NULL; )
283 switch((*compare)(A1, B1)) {
284 case -1:
285 *pda++ = *A1++; break;
286 case 0:
287 *pde++ = *A1++; B1++; break;
288 case 1:
289 *pdb++ = *B1++; break;
290 }
291
292
293 while (*A1 != NULL)
294 *pda++ = *A1++;
295 while (*B1 != NULL)
296 *pdb++ = *B1++;
297 *pda = *pdb = *pde = NULL;
298
299 return pde - E1;
300}
◆ rm_contain()
Definition at line 214 of file contain.c.
216{
217 register pset *pa, *pb;
218 register pset *pcheck = NULL;
221 int last_size = -1;
222
223
224 for(pa = A1; (a = *pa++) != NULL; ) {
225
226 if (
SIZE(a) != last_size)
227 last_size =
SIZE(a), pcheck = pdest;
228 for(pb = A1; pb != pcheck; ) {
229 b = *pb++;
231 goto lnext1;
232 }
233
234 *pdest++ = a;
235 lnext1: ;
236 }
237
238 *pdest = NULL;
239 return pdest - A1;
240}
◆ rm_equal()
Definition at line 196 of file contain.c.
199{
200 register pset *
p, *pdest = A1;
201
202 if (*A1 != NULL) {
203 for(
p = A1+1; *
p != NULL;
p++)
204 if ((*compare)(
p,
p-1) != 0)
207 *pdest = NULL;
208 }
209 return pdest - A1;
210}
◆ rm_rev_contain()
Definition at line 244 of file contain.c.
246{
247 register pset *pa, *pb;
248 register pset *pcheck = NULL;
251 int last_size = -1;
252
253
254 for(pa = A1; (a = *pa++) != NULL; ) {
255
256 if (
SIZE(a) != last_size)
257 last_size =
SIZE(a), pcheck = pdest;
258 for(pb = A1; pb != pcheck; ) {
259 b = *pb++;
261 goto lnext1;
262 }
263
264 *pdest++ = a;
265 lnext1: ;
266 }
267
268 *pdest = NULL;
269 return pdest - A1;
270}
◆ sf_contain()
Definition at line 37 of file contain.c.
39{
40 int cnt;
43
49 return R;
50}
◆ sf_dupl()
Definition at line 99 of file contain.c.
101{
102 register int cnt;
105
110 return R;
111}
◆ sf_ind_contain()
Definition at line 81 of file contain.c.
84{
85 int cnt;
88
94 return R;
95}
pset_family sf_ind_unlist()
◆ sf_ind_unlist()
Definition at line 382 of file contain.c.
387{
388 register pset pr,
p, *pa;
389 register int i, *new_row_indices;
391
393 new_row_indices =
ALLOC(
int, totcnt);
394 for(pr = R->
data, pa = A1, i=0; (
p = *pa++) != NULL; pr += R->
wsize, i++) {
396 new_row_indices[i] = row_indices[(
p - pfirst)/R->
wsize];
397 }
398 for(i = 0; i < totcnt; i++)
399 row_indices[i] = new_row_indices[i];
400 FREE(new_row_indices);
402 return R;
403}
#define INLINEset_copy(r, a)
◆ sf_list()
Definition at line 351 of file contain.c.
353{
354 register pset p, last, *pdest, *A1;
355
356
360 *pdest = NULL;
361 return A1;
362}
#define foreach_set(R, last, p)
◆ sf_merge()
Definition at line 407 of file contain.c.
410{
411 register pset pr, ps, *pmin, *pmid, *pmax;
413 pset *temp[3], *swap;
414 int i, j, n;
415
416
420
421
422 n = 3; temp[0] = A1; temp[1] = B1; temp[2] = E1;
423 for(i = 0; i < n-1; i++)
424 for(j = i+1; j < n; j++)
425 if (
desc1(*temp[i], *temp[j]) > 0) {
426 swap = temp[j];
427 temp[j] = temp[i];
428 temp[i] = swap;
429 }
430 pmin = temp[0]; pmid = temp[1]; pmax = temp[2];
431
432
433 while (*pmin != (
pset) NULL) {
434 ps = *pmin++;
437 if (
desc1(*pmin, *pmax) > 0) {
438 swap = pmax; pmax = pmin; pmin = pmid; pmid = swap;
439 }
else if (
desc1(*pmin, *pmid) > 0) {
440 swap = pmin; pmin = pmid; pmid = swap;
441 }
442 }
443
447 return R;
448}
◆ sf_rev_contain()
Definition at line 58 of file contain.c.
60{
61 int cnt;
64
70 return R;
71}
◆ sf_sort()
Definition at line 330 of file contain.c.
333{
334 register pset p, last, *pdest, *A1;
335
336
341 }
342 *pdest = NULL;
343
344
345 qsort((
char *) A1, (
size_t)A->count,
sizeof(
pset), compare);
346 return A1;
347}
#define PUTSIZE(set, size)
◆ sf_union()
Definition at line 121 of file contain.c.
123{
124 int cnt;
127
131 R =
sf_merge(A1, B1, E1, cnt, A->sf_size);
133 return R;
134}
◆ sf_unlist()
Definition at line 366 of file contain.c.
369{
370 register pset pr,
p, *pa;
372
374 for(pr = R->
data, pa = A1; (
p = *pa++) != NULL; pr += R->
wsize)
377 return R;
378}