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