X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fexpairseq.cpp;h=ec88239471a393ee20f6cb239b72d1939812e308;hp=360c7b97fcc45840afcb9bc1b885055fd25c46be;hb=b0265215a51a081d20fe68475e080716afc2d45a;hpb=24fe247f9ed16114a765a01c593fec5c4a2f591c diff --git a/ginac/expairseq.cpp b/ginac/expairseq.cpp index 360c7b97..ec882394 100644 --- a/ginac/expairseq.cpp +++ b/ginac/expairseq.cpp @@ -29,7 +29,9 @@ #include "debugmsg.h" #include "utils.h" +#ifndef NO_GINAC_NAMESPACE namespace GiNaC { +#endif // ndef NO_GINAC_NAMESPACE #ifdef EXPAIRSEQ_USE_HASHTAB #error "FIXME: expair_needs_further_processing not yet implemented for hashtabs, sorry. A.F." @@ -1502,17 +1504,18 @@ epvector * expairseq::subschildren(lst const & ls, lst const & lr) const // returns a NULL pointer if nothing had to be substituted // returns a pointer to a newly created epvector otherwise // (which has to be deleted somewhere else) - + GINAC_ASSERT(ls.nops()==lr.nops()); + epvector::const_iterator last=seq.end(); epvector::const_iterator cit=seq.begin(); while (cit!=last) { ex const & subsed_ex=(*cit).rest.subs(ls,lr); if (!are_ex_trivially_equal((*cit).rest,subsed_ex)) { - + // something changed, copy seq, subs and return it epvector *s=new epvector; s->reserve(seq.size()); - + // copy parts of seq which are known not to have changed epvector::const_iterator cit2=seq.begin(); while (cit2!=cit) { @@ -1528,7 +1531,7 @@ epvector * expairseq::subschildren(lst const & ls, lst const & lr) const s->push_back(combine_ex_with_coeff_to_pair((*cit2).rest.subs(ls,lr), (*cit2).coeff)); ++cit2; - } + } return s; } ++cit; @@ -1537,75 +1540,6 @@ epvector * expairseq::subschildren(lst const & ls, lst const & lr) const return 0; // nothing has changed } -/* -epvector expairseq::subschildren(lst const & ls, lst const & lr) const -{ - epvector s; - s.reserve(seq.size()); - - for (epvector::const_iterator it=seq.begin(); it!=seq.end(); ++it) { - s.push_back(split_ex_to_pair((*it).rest.subs(ls,lr),(*it).coeff)); - } - return s; -} -*/ - -/* -void expairseq::sort(epviter first, epviter last, expair_is_less comp) -{ - if (first != last) { - introsort_loop(first, last, lg(last - first) * 2, comp); - __final_insertion_sort(first, last, comp); - } -} - -ptrdiff_t expairseq::lg(ptrdiff_t n) -{ - ptrdiff_t k; - for (k = 0; n > 1; n >>= 1) ++k; - return k; -} - -void expairseq::introsort_loop(epviter first, epviter last, - ptrdiff_t depth_limit, expair_is_less comp) -{ - while (last - first > stl_threshold) { - if (depth_limit == 0) { - partial_sort(first, last, last, comp); - return; - } - --depth_limit; - epviter cut = unguarded_partition(first, last, - expair(__median(*first, *(first + (last - first)/2), - *(last - 1), comp)), comp); - introsort_loop(cut, last, depth_limit, comp); - last = cut; - } -} - -epviter expairseq::unguarded_partition(epviter first, epviter last, - expair pivot, expair_is_less comp) -{ - while (1) { - while (comp(*first, pivot)) ++first; - --last; - while (comp(pivot, *last)) --last; - if (!(first < last)) return first; - iter_swap(first, last); - ++first; - } -} - -void expairseq::partial_sort(epviter first, epviter middle, epviter last, - expair_is_less comp) { - make_heap(first, middle, comp); - for (RandomAccessIterator i = middle; i < last; ++i) - if (comp(*i, *first)) - __pop_heap(first, middle, i, T(*i), comp, distance_type(first)); - sort_heap(first, middle, comp); -} -*/ - ////////// // static member variables ////////// @@ -1627,4 +1561,6 @@ unsigned expairseq::hashtabfactor=1; const expairseq some_expairseq; type_info const & typeid_expairseq=typeid(some_expairseq); +#ifndef NO_GINAC_NAMESPACE } // namespace GiNaC +#endif // ndef NO_GINAC_NAMESPACE