FAUST compiler  0.9.9.6b8
atan2prim.cpp
Go to the documentation of this file.
1 #include "xtended.hh"
2 #include "Text.hh"
3 #include <math.h>
4 
5 #include "floats.hh"
6 
7 class Atan2Prim : public xtended
8 {
9 
10  public:
11 
12  Atan2Prim() : xtended("atan2") {}
13 
14  virtual unsigned int arity () { return 2; }
15 
16  virtual bool needCache () { return true; }
17 
18  virtual Type infereSigType (const vector<Type>& args)
19  {
20  assert (args.size() == 2);
21  return floatCast(args[0]|args[1]);
22  }
23 
24  virtual void sigVisit (Tree sig, sigvisitor* visitor) {}
25 
26  virtual int infereSigOrder (const vector<int>& args) {
27  return max(args[0], args[1]);
28  }
29 
30 
31  virtual Tree computeSigOutput (const vector<Tree>& args)
32  {
33  assert (args.size() == 2);
34  num n,m;
35  if (isNum(args[0],n) && isNum(args[1],m)) {
36  return tree(atan2(double(n), double(m)));
37  } else {
38  return tree(symbol(), args[0], args[1]);
39  }
40  }
41 
42  virtual string generateCode (Klass* klass, const vector<string>& args, const vector<Type>& types)
43  {
44  assert (args.size() == arity());
45  assert (types.size() == arity());
46 
47  return subst("atan2$2($0,$1)", args[0], args[1], isuffix());
48  }
49 
50  virtual string generateLateq (Lateq* lateq, const vector<string>& args, const vector<Type>& types)
51  {
52  assert (args.size() == arity());
53  assert (types.size() == arity());
54 
55  return subst("\\arctan\\frac{$0}{$1}", args[0], args[1]);
56  }
57 
58 };
59 
60 
62 
63 
virtual string generateLateq(Lateq *lateq, const vector< string > &args, const vector< Type > &types)
Definition: atan2prim.cpp:50
Definition: num.hh:58
virtual bool needCache()
Definition: atan2prim.cpp:16
bool isNum(Tree a)
Definition: signals.hh:187
virtual unsigned int arity()
Definition: atan2prim.cpp:14
A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches.
Definition: tree.hh:109
Definition: lateq.hh:56
double max(double x, double y)
Definition: interval.hh:60
virtual void sigVisit(Tree sig, sigvisitor *visitor)
Definition: atan2prim.cpp:24
virtual Tree computeSigOutput(const vector< Tree > &args)
Definition: atan2prim.cpp:31
virtual Type infereSigType(const vector< Type > &args)
Definition: atan2prim.cpp:18
Type floatCast(Type t)
Definition: sigtype.hh:270
string subst(const string &model, const vector< string > &args)
Text substitution.
Definition: Text.cpp:47
xtended * gAtan2Prim
Definition: atan2prim.cpp:61
Definition: klass.hh:55
virtual string generateCode(Klass *klass, const vector< string > &args, const vector< Type > &types)
Definition: atan2prim.cpp:42
Sym symbol()
Definition: xtended.hh:24
Tree tree(const Node &n)
Definition: tree.hh:186
virtual int infereSigOrder(const vector< int > &args)
Definition: atan2prim.cpp:26
const char * isuffix()
suffix for math functions
Definition: floats.cpp:43