1
2 #include "def.h"
3 #include "macro.h"
4
5 INT tmh_integer__faktor();
tph_integer__faktor(a,b,f)6 INT tph_integer__faktor(a,b,f) OP a,b,f;
7 {
8 INT erg = OK;
9 CTO(INTEGER,"tph_integer__faktor(1)",a);
10 CTTO(HASHTABLE,HOMSYM,"tph_integer__faktor(2)",b);
11 erg += tmh_integer__faktor(a,b,f);
12 ENDR("tph_integer__faktor");
13 }
14
15 OP find_tmh_integer();
find_tph_integer(a)16 OP find_tph_integer(a) OP a;
17 /* AK 300102 */
18 {
19 INT erg = OK;
20 CTO(INTEGER,"find_tph_integer(1)",a);
21 return find_tmh_integer(a);
22 ENDO("find_tph_integer");
23 }
24
25 INT mhh_hashtable_hashtable_();
26 INT t_splitpart();
27
28 INT t_productexponent();
29
tph_partition__faktor(a,b,f)30 INT tph_partition__faktor(a,b,f) OP a,b,f;
31 /* AK 300102 */
32 {
33 return t_productexponent(a,b,f,tph_integer__faktor,find_tph_integer);
34 }
35
tph_partition__faktor_pre300102(a,b,f)36 INT tph_partition__faktor_pre300102(a,b,f) OP a,b,f;
37 {
38 INT erg = OK;
39 CTO(PARTITION,"tph_partition__faktor(1)",a);
40 CTTO(HASHTABLE,HOMSYM,"tph_partition__faktor(2)",b);
41
42 if (S_PA_LI(a) == 0) {
43 erg += tph_integer__faktor(cons_null,b,f);
44 goto ende;
45 }
46 else if (S_PA_LI(a) == 1) {
47 erg += tph_integer__faktor(S_PA_I(a,0),b,f);
48 goto ende;
49 }
50 else {
51 t_splitpart(a,b,f,tph_partition__faktor,mhh_hashtable_hashtable_);
52 goto ende;
53 }
54 ende:
55 ENDR("tph_partition__faktor");
56 }
57
58
59
tph_powsym__faktor(a,b,f)60 INT tph_powsym__faktor(a,b,f) OP a,b,f;
61 {
62 INT erg = OK;
63
64 CTTO(HASHTABLE,POWSYM,"tph_powsym__faktor(1)",a);
65 CTTO(HASHTABLE,HOMSYM,"tph_powsym__faktor(2)",b);
66
67 T_FORALL_MONOMIALS_IN_A(a,b,f,tph_partition__faktor);
68
69 ENDR("tph_powsym__faktor");
70 }
71
72
tph_hashtable__faktor(a,b,f)73 INT tph_hashtable__faktor(a,b,f) OP a,b,f;
74 {
75 INT erg = OK;
76
77 CTO(HASHTABLE,"tph_hashtable__faktor(1)",a);
78 CTTO(HASHTABLE,HOMSYM,"tph_hashtable__faktor(2)",b);
79
80 T_FORALL_MONOMIALS_IN_A(a,b,f,tph_partition__faktor);
81
82 ENDR("tph_hashtable__faktor");
83 }
84
85
tph___faktor(a,b,f)86 INT tph___faktor(a,b,f) OP a,b,f;
87 {
88 INT erg = OK;
89 CTTTTO(INTEGER,HASHTABLE,POWSYM,PARTITION,"tph___faktor(1)",a);
90 CTTO(HASHTABLE,HOMSYM,"tph___faktor(2)",b);
91
92 if (S_O_K(a) == INTEGER) {
93 erg += tph_integer__faktor(a,b,f);
94 goto eee;
95 }
96 else if (S_O_K(a) == PARTITION) {
97 erg += tph_partition__faktor(a,b,f);
98 goto eee;
99 }
100 else if (S_O_K(a) == POWSYM) {
101 erg += tph_powsym__faktor(a,b,f);
102 goto eee;
103 }
104 else /* HASHTABLE */ {
105 erg += tph_hashtable__faktor(a,b,f);
106 goto eee;
107 }
108 eee:
109 ENDR("tph___faktor");
110 }
111
t_POWSYM_HOMSYM(a,b)112 INT t_POWSYM_HOMSYM(a,b) OP a,b;
113 {
114 INT erg = OK;
115 INT t=0;
116 CTTTTO(HASHTABLE,INTEGER,PARTITION,POWSYM,"t_POWSYM_HOMSYM",a);
117 TCE2(a,b,t_POWSYM_HOMSYM,HOMSYM);
118
119 if (S_O_K(b) == EMPTY)
120 {
121 erg += init_hashtable(b);
122 t=1;
123 }
124 tph___faktor(a,b,cons_eins);
125 if (t==1) t_HASHTABLE_HOMSYM(b,b);
126
127 ENDR("t_POWSYM_HOMSYM");
128 }
129