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