void ARingTower::elem_text_out(buffer &o, int level, const poly f, bool p_one, bool p_plus, bool p_parens) const { // o << to_string(level, f); if (f == 0) { o << "0"; return; } int nterms = n_nonzero_terms(level, f); bool needs_parens = p_parens && (nterms >= 2); if (needs_parens) { if (p_plus) o << '+'; o << '('; p_plus = false; } bool one = is_one(level, f); if (one) { if (p_plus) o << "+"; if (p_one) o << "1"; return; } const std::string &this_varname = varNames()[level]; if (level == 0) { bool firstterm = true; for (int i = f->deg; i >= 0; i--) if (f->coeffs[i] != 0) { if (!firstterm || p_plus) o << "+"; firstterm = false; if (i == 0 || f->coeffs[i] != 1) mBaseRing.elem_text_out(o, f->coeffs[i], p_one, p_plus, p_parens); if (i > 0) o << this_varname; if (i > 1) o << i; } if (needs_parens) o << ")"; } else { bool firstterm = true; for (int i = f->deg; i >= 0; i--) if (f->polys[i] != 0) { bool this_p_parens = p_parens || (i > 0); if (i == 0 || !is_one(level - 1, f->polys[i])) elem_text_out(o, level - 1, f->polys[i], p_one, p_plus || !firstterm, this_p_parens); else if (p_plus || !firstterm) o << "+"; if (i > 0) o << this_varname; if (i > 1) o << i; firstterm = false; } if (needs_parens) o << ")"; } }
void DPoly::elem_text_out(buffer &o, int level, const poly f, bool p_one, bool p_plus, bool p_parens, M2_ArrayString names) const { //o << to_string(level, f); if (f == 0) { o << "0"; return; } int nterms = n_nonzero_terms(level,f); bool needs_parens = p_parens && (nterms >= 2); if (needs_parens) { if (p_plus) o << '+'; o << '('; p_plus = false; } bool one = is_one(level, f); if (one) { if (p_plus) o << "+"; if (p_one) o << "1"; return; } M2_string this_varname = names->array[level]; if (level == 0) { bool firstterm = true; for (int i=f->deg; i>=0; i--) if (f->arr.ints[i] != 0) { if (!firstterm || p_plus) o << "+"; firstterm = false; if (i == 0 || f->arr.ints[i] != 1) o << f->arr.ints[i]; if (i > 0) o << this_varname; if (i > 1) o << i; } if (needs_parens) o << ")"; } else { bool firstterm = true; for (int i=f->deg; i>=0; i--) if (f->arr.polys[i] != 0) { bool this_p_parens = p_parens || (i > 0); if (i == 0 || !is_one(level-1,f->arr.polys[i])) elem_text_out(o, level-1,f->arr.polys[i], p_one, p_plus || !firstterm, this_p_parens, names); else if (p_plus || !firstterm) o << "+"; if (i > 0) o << this_varname; if (i > 1) o << i; firstterm = false; } if (needs_parens) o << ")"; } }