#include "def.h" #include "macro.h" INT mhp_integer_partition_(); INT mhp_integer_hashtable_(); INT mhp_integer__(a,b,c,f) OP a,b,c; OP f; /* AK 311001 */ { INT erg = OK; CTO(INTEGER,"mhp_integer__(1)",a); CTTTO(HASHTABLE,PARTITION,POWSYM,"mhp_integer__(2)",b); CTTO(HASHTABLE,POWSYM,"mhp_integer__(3)",c); CTO(ANYTYPE,"mhp_integer__(4)",f); if (S_O_K(b) == PARTITION) { erg += mhp_integer_partition_(a,b,c,f); goto ende; } else { erg += mhp_integer_hashtable_(a,b,c,f); goto ende; } ende: CTTO(HASHTABLE,POWSYM,"mhp_integer__(e3)",c); ENDR("mhp_integer__"); } INT mhp_partition__(a,b,c,f) OP a,b,c; OP f; /* AK 311001 */ { INT erg = OK; CTO(PARTITION,"mhp_partition__(1)",a); CTTTO(HASHTABLE,PARTITION,POWSYM,"mhp_partition__(2)",b); CTTO(HASHTABLE,POWSYM,"mhp_partition__(3)",c); if (S_PA_LI(a) == 0) { if (S_O_K(b) == PARTITION) { OP d; d = CALLOCOBJECT(); erg += b_sk_mo(CALLOCOBJECT(),CALLOCOBJECT(),d); erg += copy_partition(b,S_MO_S(d)); COPY(f,S_MO_K(d)); INSERT_POWSYMMONOM_(d,c); } else /* powsym or hashtable */ { OP z; FORALL(z,b,{ OP d; d = CALLOCOBJECT(); erg += b_sk_mo(CALLOCOBJECT(),CALLOCOBJECT(),d); erg += copy_partition(S_MO_S(z),S_MO_S(d)); COPY(S_MO_K(z),S_MO_K(d)); if (not EINSP(f)) { MULT_APPLY(f,S_MO_K(d)); } INSERT_POWSYMMONOM_(d,c); }); } goto endr_ende; } else { /* partition of length >= 1 */ INT i; OP d,e; d=CALLOCOBJECT(); e=CALLOCOBJECT(); erg += init_hashtable(e); erg += mhp_integer__(S_PA_I(a,0),b,e,f); for (i=1;iPOWSYM necessary */ CTTTTO(HASHTABLE,INTEGER,PARTITION,HOMSYM,"mult_homsym_powsym(1)",a); CTTTO(HASHTABLE,PARTITION,POWSYM,"mult_homsym_powsym(2)",b); CTTTO(EMPTY,HASHTABLE,POWSYM,"mult_homsym_powsym(3)",c); if (S_O_K(a) == INTEGER) { if (S_O_K(c) == EMPTY) { if (S_O_K(b) == PARTITION) init_powsym(c); else { t=1; init_hashtable(c); } } erg += mhp_integer__(a,b,c,cons_eins); } else if (S_O_K(a) == PARTITION) { if (S_O_K(c) == EMPTY) { t=1; init_hashtable(c); } erg += mhp_partition__(a,b,c,cons_eins); } else if (S_O_K(a) == HOMSYM) { if (S_O_K(c) == EMPTY) { t=1; init_hashtable(c); } erg += mhp_homsym__(a,b,c,cons_eins); } else /* if (S_O_K(a) == HASHTABLE) */ { if (S_O_K(c) == EMPTY) { t=1; init_hashtable(c); } erg += mhp_hashtable__(a,b,c,cons_eins); } if (t==1) t_HASHTABLE_POWSYM(c,c); ENDR("mult_homsym_powsym"); }