synaps/arithm/Operator.h

00001 /*********************************************************************
00002 *      This file is part of the source code of SYNAPS kernel.        *
00003 *   Author(s): B. Mourrain, GALAAD, INRIA                            *
00004 **********************************************************************
00005 History: 
00006 $Id: Operator.h,v 1.1 2005/07/11 10:39:47 mourrain Exp $
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 

SYNAPS DOCUMENTATION
logo