-
- // if any terms in the sum still are purely numeric, then they are more
- // appropriately collected into the overall coefficient
- epvector::const_iterator last = seq.end();
- epvector::const_iterator j = seq.begin();
- int terms_to_collect = 0;
- while (j != last) {
- if (unlikely(is_a<numeric>(j->rest)))
- ++terms_to_collect;
- ++j;
- }
- if (terms_to_collect) {
- std::auto_ptr<epvector> s(new epvector);
- s->reserve(seq_size - terms_to_collect);
- numeric oc = *_num1_p;
- j = seq.begin();
- while (j != last) {
- if (unlikely(is_a<numeric>(j->rest)))
- oc = oc.mul(ex_to<numeric>(j->rest)).mul(ex_to<numeric>(j->coeff));
- else
- s->push_back(*j);
- ++j;
- }
- return (new add(s, ex_to<numeric>(overall_coeff).add_dyn(oc)))
- ->setflag(status_flags::dynallocated);
- }
-