1 #include "def.h"
2 #include "macro.h"
3 INT t_splitpart();
4
tpm_integer__faktor(a,b,f)5 INT tpm_integer__faktor(a,b,f) OP a,b,f;
6 {
7 INT erg = OK;
8 OP m;
9 CTO(INTEGER,"tpm_integer__faktor(1)",a);
10 CTTO(HASHTABLE,MONOMIAL,"tpm_integer__faktor(2)",b);
11 SYMCHECK( (S_I_I(a) < 0), "tpm_integer__faktor:integer < 0");
12
13 m = CALLOCOBJECT();
14 erg += b_sk_mo(CALLOCOBJECT(),CALLOCOBJECT(), m);
15 erg += first_partition(a,S_MO_S(m));
16 COPY(f,S_MO_K(m));
17
18 if (S_O_K(b) == MONOMIAL)
19 INSERT_LIST(m,b,add_koeff,comp_monommonomial);
20 else
21 insert_scalar_hashtable(m,b,add_koeff,eq_monomsymfunc,hash_monompartition);
22
23 ENDR("tpm_integer__faktor");
24 }
25
26 INT mmm_hashtable_hashtable_();
tpm_partition__faktor(a,b,f)27 INT tpm_partition__faktor(a,b,f) OP a,b,f;
28 {
29 INT erg = OK;
30 CTO(PARTITION,"tpm_partition__faktor(1)",a);
31 CTTO(HASHTABLE,MONOMIAL,"tpm_partition__faktor(2)",b);
32 if (S_PA_LI(a) == 0) {
33 erg += tpm_integer__faktor(cons_null,b,f);
34 }
35 else if (S_PA_LI(a) == 1) {
36 erg += tpm_integer__faktor(S_PA_I(a,0),b,f);
37 }
38 else {
39 erg += t_splitpart(a,b,f,tpm_partition__faktor,mmm_hashtable_hashtable_);
40 }
41 ENDR("tpm_partition__faktor");
42 }
43
tpm_powsym__faktor(a,b,f)44 INT tpm_powsym__faktor(a,b,f) OP a,b,f;
45 {
46 INT erg = OK;
47 CTTO(HASHTABLE,POWSYM,"tpm_powsym__faktor(1)",a);
48 CTTO(HASHTABLE,MONOMIAL,"tpm_powsym__faktor(2)",b);
49
50 T_FORALL_MONOMIALS_IN_A(a,b,f,tpm_partition__faktor);
51
52 ENDR("tpm_powsym__faktor");
53 }
54
55
tpm_hashtable__faktor(a,b,f)56 INT tpm_hashtable__faktor(a,b,f) OP a,b,f;
57 {
58 INT erg = OK;
59 CTO(HASHTABLE,"tpm_hashtable__faktor(1)",a);
60 CTTO(HASHTABLE,MONOMIAL,"tpm_hashtable__faktor(2)",b);
61 T_FORALL_MONOMIALS_IN_A(a,b,f,tpm_partition__faktor);
62 ENDR("tpm_hashtable__faktor");
63 }
64
65
tpm___faktor(a,b,f)66 INT tpm___faktor(a,b,f) OP a,b,f;
67 {
68 INT erg = OK;
69 CTTTTO(INTEGER,HASHTABLE,POWSYM,PARTITION,"tpm___faktor(1)",a);
70 CTTO(HASHTABLE,MONOMIAL,"tpm___faktor(2)",b);
71
72 if (S_O_K(a) == INTEGER) {
73 erg += tpm_integer__faktor(a,b,f);
74 goto eee;
75 }
76 else if (S_O_K(a) == PARTITION) {
77 erg += tpm_partition__faktor(a,b,f);
78 goto eee;
79 }
80 else if (S_O_K(a) == POWSYM) {
81 erg += tpm_powsym__faktor(a,b,f);
82 goto eee;
83 }
84 else /* HASHTABLE */ {
85 erg += tpm_hashtable__faktor(a,b,f);
86 goto eee;
87 }
88 eee:
89 ENDR("tpm___faktor");
90 }
91
t_POWSYM_MONOMIAL(a,b)92 INT t_POWSYM_MONOMIAL(a,b) OP a,b;
93 {
94 INT erg = OK;
95 INT t=0;
96 CTTTTO(HASHTABLE,INTEGER,PARTITION,POWSYM,"t_POWSYM_MONOMIAL",a);
97 TCE2(a,b,t_POWSYM_MONOMIAL,MONOMIAL);
98
99 if (S_O_K(b) == EMPTY)
100 {
101 erg += init_hashtable(b);
102 t=1;
103 }
104 tpm___faktor(a,b,cons_eins);
105 if (t==1) t_HASHTABLE_MONOMIAL(b,b);
106
107
108 ENDR("t_POWSYM_MONOMIAL");
109 }
110