X-Git-Url: https://ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Fexpair.h;h=513dd5c96442b294f1d4a2a755196155a8459334;hb=eb36a2fcd5f2c121a249f6d54bd18b2138bf6c3c;hp=954442509e40a52cc1f7f370c977368db6e28a79;hpb=e7cc6a764ff67b5885d6633385fac23ccc1dc9a7;p=ginac.git diff --git a/ginac/expair.h b/ginac/expair.h index 95444250..513dd5c9 100644 --- a/ginac/expair.h +++ b/ginac/expair.h @@ -102,15 +102,30 @@ public: ex coeff; ///< second member of pair, must be numeric }; -/** Function objects for insertion into third argument of STL's sort() etc. */ +/** Function object for insertion into third argument of STL's sort() etc. */ struct expair_is_less : public std::binary_function { bool operator()(const expair &lh, const expair &rh) const { return lh.is_less(rh); } }; +/** Function object not caring about the numerical coefficients for insertion + * into third argument of STL's sort(). Note that this does not define a + * strict weak ordering since for any symbol x we have neither 3*x<2*x or + * 2*x<3*x. Handle with care! */ +struct expair_rest_is_less : public std::binary_function { + bool operator()(const expair &lh, const expair &rh) const { return (lh.rest.compare(rh.rest)<0); } +}; + struct expair_swap : public std::binary_function { void operator()(expair &lh, expair &rh) const { lh.swap(rh); } }; +inline void swap(expair & e1, expair & e2) +{ e1.swap(e2); } + +// This makes STL algorithms use the more efficient swap operation for ex objects +inline void iter_swap(std::vector::iterator i1, std::vector::iterator i2) +{ i1->swap(*i2); } + } // namespace GiNaC #endif // ndef __GINAC_EXPAIR_H__