+void safe_inserter::update_dummy_indices(const exvector &v)
+{
+ exvector new_dummy_indices;
+ set_union(dummy_indices.begin(), dummy_indices.end(), v.begin(), v.end(),
+ std::back_insert_iterator<exvector>(new_dummy_indices), ex_is_less());
+ dummy_indices.swap(new_dummy_indices);
+}
+
+void safe_inserter::insert_new_pair(const expair &p, const ex &orig_ex)
+{
+ if(!dodummies) {
+ epv->push_back(p);
+ return;
+ }
+ exvector dummies_of_factor = get_all_dummy_indices(p.rest);
+ if(dummies_of_factor.size() == 0) {
+ epv->push_back(p);
+ return;
+ }
+ sort(dummies_of_factor.begin(), dummies_of_factor.end(), ex_is_less());
+ exvector dummies_of_orig_ex = get_all_dummy_indices(orig_ex);
+ sort(dummies_of_orig_ex.begin(), dummies_of_orig_ex.end(), ex_is_less());
+ exvector new_dummy_indices;
+ new_dummy_indices.reserve(dummy_indices.size());
+ set_difference(dummy_indices.begin(), dummy_indices.end(), dummies_of_orig_ex.begin(), dummies_of_orig_ex.end(),
+ std::back_insert_iterator<exvector>(new_dummy_indices), ex_is_less());
+ dummy_indices.swap(new_dummy_indices);
+ ex newfactor = rename_dummy_indices_uniquely(dummy_indices, dummies_of_factor, p.rest);
+ update_dummy_indices(dummies_of_factor);
+ epv -> push_back(expair(newfactor, p.coeff));
+}