00001
00002
00003
00004
00005
00006
00007
00008 #ifndef SYNAPS_ARITHM_OPERATOR_H
00009 #define SYNAPS_ARITHM_OPERATOR_H
00010
00011 #include <synaps/init.h>
00012
00013 __BEGIN_NAMESPACE_SYNAPS
00014
00015
00016 template<char x, class A> struct Op1;
00017 template<char x, class A, class B> struct Op;
00018
00019 template <class A> struct Op<'-',A> {
00020 const A & op;
00021 Op1 () {};
00022 Op1 (const Op1<'-',A> & p): op(p.op) {};
00023 Op1 (const A & a) : op(a){};
00024 };
00025
00026 template <class A, class B> struct Op<'+',A,B> {
00027 const A & op1;
00028 const B & op2;
00029 Op () {};
00030 Op(const Op<'+',A,B> & p): op1(p.op1), op2(p.op2) {};
00031 Op(const A & a, const B & b) : op1(a), op2(b) {};
00032 };
00033
00034 template <class A, class B> struct Op<'+',A,B> {
00035 const A & op1;
00036 const B & op2;
00037 Op () {};
00038 Op(const Op<'+',A,B> & p): op1(p.op1), op2(p.op2) {};
00039 Op(const A & a, const B & b) : op1(a), op2(b) {};
00040 };
00041
00042 template <class A, class B> struct Op<'-',A,B> {
00043 const A & op1;
00044 const B & op2;
00045 Op () {};
00046 Op(const Op<'-',A,B> & p): op1(p.op1), op2(p.op2) {};
00047 Op(const A & a, const B & b) : op1(a), op2(b) {};
00048 };
00049
00050 template <class A, class B> struct Op<'*',A,B> {
00051 const A& op1;
00052 const B& op2;
00053 Op() {};
00054 Op(const Op<'*',A,B> & p): op1(p.op1), op2(p.op2) {};
00055 Op(const A & a, const B & b) : op1(a), op2(b) {};
00056 };
00057
00058 template <class A, class B> struct Op<'.',A,B> {
00059 const A& op1;
00060 const B& op2;
00061 Op() {};
00062 Op(const Op<'.',A,B> & p): op1(p.op1), op2(p.op2) {};
00063 Op(const A & a, const B & b) : op1(a), op2(b) {};
00064 };
00065
00066 template <class A, class B> struct Op<'/',A,B> {
00067 const A& op1;
00068 const B& op2;
00069 Op() {};
00070 Op(const Op<'/',A,B> & p): op1(p.op1), op2(p.op2) {};
00071 Op(const A & a, const B & b) : op1(a), op2(b) {};
00072 };
00073
00074 template <class A, class B> struct Op<'%',A,B> {
00075 const A& op1;
00076 const B& op2;
00077 Op() {};
00078 Op(const Op<'%',A,B> & p): op1(p.op1), op2(p.op2) {};
00079 Op(const A & a, const B & b) : op1(a), op2(b) {};
00080 };
00081
00082 template <class A, class B> struct Op<'^',A,B> {
00083 const A& op1;
00084 const B& op2;
00085 Op() {};
00086 Op(const Op<'^',A,B> & p): op1(p.op1), op2(p.op2) {};
00087 Op(const A & a, const B & b) : op1(a), op2(b) {};
00088 };
00089
00090
00091 __END_NAMESPACE_SYNAPS
00092
00093 #endif // SYNAPS_ARITHM_OPERATOR_H
00094