00001 #ifndef __XTENDED__
00002 #define __XTENDED__
00003
00004
00005 #include "tlib.hh"
00006 #include "sigtype.hh"
00007 #include "klass.hh"
00008 #include "sigvisitor.hh"
00009 #include <vector>
00010 #include "lateq.hh"
00011
00012 class xtended
00013 {
00014 Symbol* fSymbol;
00015 public:
00016
00017
00018 xtended (const char* name) :
00019 fSymbol(::symbol(name)) {
00020 setUserData(fSymbol, (void*)this);
00021 }
00022 virtual ~xtended() { setUserData(fSymbol, 0); }
00023
00024 Sym symbol() { return fSymbol; }
00025 const char * name () { return ::name(fSymbol); }
00026
00027 Tree box () {
00028 Tree b = tree(fSymbol);
00029 assert(getUserData(b) != 0);
00030 return b;
00031 }
00032
00033
00034 virtual unsigned int arity () = 0;
00035 virtual string generateCode (Klass* klass, const vector<string>& args, const vector<Type>& types) = 0;
00036 virtual string generateLateq (Lateq* lateq, const vector<string>& args, const vector<Type>& types) = 0;
00037 virtual int infereSigOrder (const vector<int>& args) = 0;
00038 virtual Type infereSigType (const vector<Type>& args) = 0;
00039 virtual Tree computeSigOutput (const vector<Tree>& args) = 0;
00040 virtual bool needCache () = 0;
00041 };
00042
00043
00044
00045 extern xtended* gAcosPrim;
00046 extern xtended* gAsinPrim;
00047 extern xtended* gAtanPrim;
00048 extern xtended* gAtan2Prim;
00049
00050 extern xtended* gSinPrim;
00051 extern xtended* gCosPrim;
00052 extern xtended* gTanPrim;
00053
00054
00055
00056
00057 extern xtended* gExpPrim;
00058 extern xtended* gLogPrim;
00059 extern xtended* gLog10Prim;
00060 extern xtended* gPowPrim;
00061
00062 extern xtended* gSqrtPrim;
00063 extern xtended* gCbrtPrim;
00064 extern xtended* gHypotPrim;
00065 extern xtended* gLdexpPrim;
00066 extern xtended* gScalbPrim;
00067 extern xtended* gLog1pPrim;
00068 extern xtended* gLogbPrim;
00069 extern xtended* gIlogbPrim;
00070 extern xtended* gExpm1Prim;
00071
00072
00073
00074
00075 extern xtended* gAcoshPrim;
00076 extern xtended* gAsinhPrim;
00077 extern xtended* gAtanhPrim;
00078
00079 extern xtended* gSinhPrim;
00080 extern xtended* gCoshPrim;
00081 extern xtended* gTanhPrim;
00082
00083
00084
00085
00086 extern xtended* gFmodPrim;
00087 extern xtended* gRemainderPrim;
00088
00089
00090
00091 extern xtended* gFloorPrim;
00092 extern xtended* gCeilPrim;
00093 extern xtended* gRintPrim;
00094
00095
00096
00097
00098 extern xtended* gAbsPrim;
00099 extern xtended* gMaxPrim;
00100 extern xtended* gMinPrim;
00101
00102 #endif