X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fex.h;h=15e806b7509d04c8c4b311a435454816caa5c637;hp=030046c5c1d576612634cb4c7a2daf4be4b3181c;hb=d63a6561624aaffb3a684c7665ea104bc5cfa4a0;hpb=a0c5b050b17e581705810a92178cfb1d48a088c1 diff --git a/ginac/ex.h b/ginac/ex.h index 030046c5..15e806b7 100644 --- a/ginac/ex.h +++ b/ginac/ex.h @@ -855,6 +855,52 @@ public: ex operator()(const ex & e) { return ptr(e, arg1, arg2, arg3); } }; +template +class pointer_to_member_to_map_function_0args : public map_function { +protected: + ex (C::*ptr)(const ex &); + C &c; +public: + explicit pointer_to_member_to_map_function_0args(ex (C::*member)(const ex &), C &obj) : ptr(member), c(obj) {} + ex operator()(const ex & e) { return (c.*ptr)(e); } +}; + +template +class pointer_to_member_to_map_function_1args : public map_function { +protected: + ex (C::*ptr)(const ex &, T1); + C &c; + T1 arg1; +public: + explicit pointer_to_member_to_map_function_1args(ex (C::*member)(const ex &, T1), C &obj, T1 a1) : ptr(member), c(obj), arg1(a1) {} + ex operator()(const ex & e) { return (c.*ptr)(e, arg1); } +}; + +template +class pointer_to_member_to_map_function_2args : public map_function { +protected: + ex (C::*ptr)(const ex &, T1, T2); + C &c; + T1 arg1; + T2 arg2; +public: + explicit pointer_to_member_to_map_function_2args(ex (C::*member)(const ex&, T1, T2), C &obj, T1 a1, T2 a2) : ptr(member), c(obj), arg1(a1), arg2(a2) {} + ex operator()(const ex & e) { return (c.*ptr)(e, arg1, arg2); } +}; + +template +class pointer_to_member_to_map_function_3args : public map_function { +protected: + ex (C::*ptr)(const ex &, T1, T2, T3); + C &c; + T1 arg1; + T2 arg2; + T3 arg3; +public: + explicit pointer_to_member_to_map_function_3args(ex (C::*member)(const ex &, T1, T2, T3), C &obj, T1 a1, T2 a2, T3 a3) : ptr(member), c(obj), arg1(a1), arg2(a2), arg3(a3) {} + ex operator()(const ex & e) { return (c.*ptr)(e, arg1, arg2, arg3); } +}; + inline ex ex::map(ex f(const ex &)) const { pointer_to_map_function fcn(f);