FAUST compiler  0.9.9.6b8
xtended.hh
Go to the documentation of this file.
1 #ifndef __XTENDED__
2 #define __XTENDED__
3 
4 // xtended
5 #include "tlib.hh"
6 #include "sigtype.hh"
7 #include "klass.hh"
8 #include "sigvisitor.hh"
9 #include <vector>
10 #include "lateq.hh"
11 
12 class xtended
13 {
15  public:
16 
17 
18  xtended (const char* name) :
19  fSymbol(::symbol(name)) {
20  setUserData(fSymbol, (void*)this);
21  }
22  virtual ~xtended() { setUserData(fSymbol, 0); }
23 
24  Sym symbol() { return fSymbol; }
25  const char * name () { return ::name(fSymbol); }
26 
27  Tree box () {
28  Tree b = tree(fSymbol);
29  assert(getUserData(b) != 0);
30  return b;
31  }
32 
33  // virtual method to be implemented by subclasses
34  virtual unsigned int arity () = 0;
35  virtual string generateCode (Klass* klass, const vector<string>& args, const vector<Type>& types) = 0;
36  virtual string generateLateq (Lateq* lateq, const vector<string>& args, const vector<Type>& types) = 0;
37  virtual int infereSigOrder (const vector<int>& args) = 0;
38  virtual Type infereSigType (const vector<Type>& args) = 0;
39  virtual Tree computeSigOutput (const vector<Tree>& args) = 0;
40  virtual bool needCache () = 0;
41 
42  virtual bool isSpecialInfix() { return false; }
43 };
44 
45 // -- Trigonometric Functions
46 
47 extern xtended* gAcosPrim;
48 extern xtended* gAsinPrim;
49 extern xtended* gAtanPrim;
50 extern xtended* gAtan2Prim;
51 
52 extern xtended* gSinPrim;
53 extern xtended* gCosPrim;
54 extern xtended* gTanPrim;
55 
56 
57 // -- Exponential Functions
58 
59 extern xtended* gExpPrim;
60 extern xtended* gLogPrim;
61 extern xtended* gLog10Prim;
62 extern xtended* gPowPrim;
63 
64 extern xtended* gSqrtPrim;
65 extern xtended* gCbrtPrim;
66 extern xtended* gHypotPrim;
67 extern xtended* gLdexpPrim;
68 extern xtended* gScalbPrim;
69 extern xtended* gLog1pPrim;
70 extern xtended* gLogbPrim;
71 extern xtended* gIlogbPrim;
72 extern xtended* gExpm1Prim;
73 
74 
75 // -- Hyperbolic Functions
76 
77 extern xtended* gAcoshPrim;
78 extern xtended* gAsinhPrim;
79 extern xtended* gAtanhPrim;
80 
81 extern xtended* gSinhPrim;
82 extern xtended* gCoshPrim;
83 extern xtended* gTanhPrim;
84 
85 
86 // -- Remainder Functions
87 
88 extern xtended* gFmodPrim;
89 extern xtended* gRemainderPrim;
90 
91 // -- Nearest Integer Functions
92 
93 extern xtended* gFloorPrim;
94 extern xtended* gCeilPrim;
95 extern xtended* gRintPrim;
96 
97 
98 // -- Miscellaneous Functions
99 
100 extern xtended* gAbsPrim;
101 extern xtended* gMaxPrim;
102 extern xtended* gMinPrim;
103 
104 #endif
void setUserData(Symbol *sym, void *d)
Set user data.
Definition: symbol.hh:101
xtended * gExpPrim
Definition: expprim.cpp:61
xtended * gLdexpPrim
xtended * gLog10Prim
Definition: log10prim.cpp:67
xtended * gTanPrim
Definition: tanprim.cpp:59
xtended * gAcosPrim
Definition: acosprim.cpp:58
virtual bool isSpecialInfix()
generaly false, but true for binary op # such that #(x) == _::x
Definition: xtended.hh:42
virtual Type infereSigType(const vector< Type > &args)=0
xtended * gScalbPrim
virtual ~xtended()
Definition: xtended.hh:22
xtended(const char *name)
Definition: xtended.hh:18
xtended * gMinPrim
Definition: minprim.cpp:147
xtended * gLogbPrim
xtended * gCeilPrim
Definition: ceilprim.cpp:61
virtual string generateLateq(Lateq *lateq, const vector< string > &args, const vector< Type > &types)=0
xtended * gAsinPrim
Definition: asinprim.cpp:59
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
Definition: tree.hh:109
Definition: lateq.hh:56
xtended * gCbrtPrim
const char * name()
Definition: xtended.hh:25
virtual bool needCache()=0
xtended * gCosPrim
Definition: cosprim.cpp:59
xtended * gLogPrim
Definition: logprim.cpp:66
xtended * gAbsPrim
Definition: absprim.cpp:77
Symbol * fSymbol
the symbol the xtended is attached to
Definition: xtended.hh:14
Definition: klass.hh:55
virtual int infereSigOrder(const vector< int > &args)=0
xtended * gHypotPrim
xtended * gAtan2Prim
Definition: atan2prim.cpp:61
xtended * gLog1pPrim
xtended * gExpm1Prim
Sym symbol()
Definition: xtended.hh:24
virtual Tree computeSigOutput(const vector< Tree > &args)=0
virtual unsigned int arity()=0
xtended * gRemainderPrim
const char * name(Symbol *sym)
Returns the name of a symbol.
Definition: symbol.hh:98
xtended * gAtanPrim
Definition: atanprim.cpp:59
xtended * gCoshPrim
xtended * gTanhPrim
xtended * gSqrtPrim
Definition: sqrtprim.cpp:67
Tree tree(const Node &n)
Definition: tree.hh:186
xtended * gPowPrim
Definition: powprim.cpp:77
Symbols are unique objects with a name stored in a hash table.
Definition: symbol.hh:53
xtended * gFloorPrim
Definition: floorprim.cpp:61
virtual string generateCode(Klass *klass, const vector< string > &args, const vector< Type > &types)=0
xtended * gSinPrim
Definition: sinprim.cpp:59
Tree box()
Definition: xtended.hh:27
xtended * gFmodPrim
Definition: fmodprim.cpp:61
void * getUserData(Symbol *sym)
Returns user data.
Definition: symbol.hh:100
xtended * gAtanhPrim
xtended * gSinhPrim
xtended * gIlogbPrim
xtended * gMaxPrim
Definition: maxprim.cpp:121
xtended * gAsinhPrim
xtended * gAcoshPrim
xtended * gRintPrim
Definition: rintprim.cpp:67