| 560 | } |
| 561 | |
| 562 | void hIndAllMult(scmon pure, int Npure, scfmon rad, int Nrad, |
| 563 | varset var, int Nvar) |
| 564 | { |
| 565 | int dn, iv, rad0, b, c, x; |
| 566 | scmon pn; |
| 567 | scfmon rn; |
| 568 | if (Nrad < 2) |
| 569 | { |
| 570 | dn = Npure + Nrad; |
| 571 | if (dn > hCo) |
| 572 | { |
| 573 | if (!Nrad) |
| 574 | hCheckIndep(pure); |
| 575 | else |
| 576 | { |
| 577 | pn = *rad; |
| 578 | for (iv = Nvar; iv; iv--) |
| 579 | { |
| 580 | x = var[iv]; |
| 581 | if (pn[x]) |
| 582 | { |
| 583 | pure[x] = 1; |
| 584 | hCheckIndep(pure); |
| 585 | pure[x] = 0; |
| 586 | } |
| 587 | } |
| 588 | } |
| 589 | } |
| 590 | return; |
| 591 | } |
| 592 | iv = Nvar; |
| 593 | while(pure[var[iv]]) iv--; |
| 594 | hStepR(rad, Nrad, var, iv, &rad0); |
| 595 | iv--; |
| 596 | if (rad0 < Nrad) |
| 597 | { |
| 598 | pn = hGetpure(pure); |
| 599 | rn = hGetmem(Nrad, rad, radmem[iv]); |
| 600 | pn[var[iv + 1]] = 1; |
| 601 | hIndAllMult(pn, Npure + 1, rn, rad0, var, iv); |
| 602 | pn[var[iv + 1]] = 0; |
| 603 | b = rad0; |
| 604 | c = Nrad; |
| 605 | hElimR(rn, &rad0, b, c, var, iv); |
| 606 | hPure(rn, b, &c, var, iv, pn, &x); |
| 607 | hLex2R(rn, rad0, b, c, var, iv, hwork); |
| 608 | rad0 += (c - b); |
| 609 | hIndAllMult(pn, Npure + x, rn, rad0, var, iv); |
| 610 | } |
| 611 | else |
| 612 | { |
| 613 | hIndAllMult(pure, Npure, rad, Nrad, var, iv); |
| 614 | } |
| 615 | } |
| 616 | |
| 617 | // multiplicity |
| 618 |
no test coverage detected