FAUST compiler  0.9.9.6b8
xtended.hh
Go to the documentation of this file.
00001 #ifndef __XTENDED__
00002 #define __XTENDED__
00003 
00004 // xtended
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     // virtual method to be implemented by subclasses
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     virtual bool    isSpecialInfix()    { return false; }   
00043 };
00044 
00045 // -- Trigonometric Functions
00046 
00047 extern xtended* gAcosPrim;
00048 extern xtended* gAsinPrim;
00049 extern xtended* gAtanPrim;
00050 extern xtended* gAtan2Prim;
00051 
00052 extern xtended* gSinPrim;
00053 extern xtended* gCosPrim;
00054 extern xtended* gTanPrim;
00055 
00056 
00057 // -- Exponential Functions
00058 
00059 extern xtended* gExpPrim;       
00060 extern xtended* gLogPrim;       
00061 extern xtended* gLog10Prim; 
00062 extern xtended* gPowPrim; 
00063         
00064 extern xtended* gSqrtPrim;  
00065 extern xtended* gCbrtPrim;  
00066 extern xtended* gHypotPrim; 
00067 extern xtended* gLdexpPrim; 
00068 extern xtended* gScalbPrim; 
00069 extern xtended* gLog1pPrim; 
00070 extern xtended* gLogbPrim;  
00071 extern xtended* gIlogbPrim; 
00072 extern xtended* gExpm1Prim; 
00073 
00074 
00075 // -- Hyperbolic Functions
00076 
00077 extern xtended* gAcoshPrim;
00078 extern xtended* gAsinhPrim;
00079 extern xtended* gAtanhPrim;
00080 
00081 extern xtended* gSinhPrim;
00082 extern xtended* gCoshPrim;
00083 extern xtended* gTanhPrim;
00084 
00085 
00086 // -- Remainder Functions
00087 
00088 extern xtended* gFmodPrim;
00089 extern xtended* gRemainderPrim;
00090 
00091 // -- Nearest Integer Functions
00092 
00093 extern xtended* gFloorPrim;
00094 extern xtended* gCeilPrim; 
00095 extern xtended* gRintPrim; 
00096 
00097 
00098 // -- Miscellaneous Functions
00099 
00100 extern xtended* gAbsPrim;
00101 extern xtended* gMaxPrim;
00102 extern xtended* gMinPrim;
00103 
00104 #endif