Added posibility to make map_functions out of members.
authorChris Dams <Chris.Dams@mi.infn.it>
Tue, 9 May 2006 14:16:31 +0000 (14:16 +0000)
committerChris Dams <Chris.Dams@mi.infn.it>
Tue, 9 May 2006 14:16:31 +0000 (14:16 +0000)
ginac/ex.h

index 030046c5c1d576612634cb4c7a2daf4be4b3181c..15e806b7509d04c8c4b311a435454816caa5c637 100644 (file)
@@ -855,6 +855,52 @@ public:
        ex operator()(const ex & e) { return ptr(e, arg1, arg2, arg3); }
 };
 
+template<class C>
+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 C, class T1>
+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 C, class T1, class T2>
+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 C, class T1, class T2, class T3>
+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);