FAUST compiler  0.9.9.6b8
binop.hh
Go to the documentation of this file.
1 /************************************************************************
2  ************************************************************************
3  FAUST compiler
4  Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
5  ---------------------------------------------------------------------
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  ************************************************************************
20  ************************************************************************/
21 
22 
23 
24 #ifndef _BINOP_
25 #define _BINOP_
26 
27 #include "node.hh"
28 
29 typedef const Node (*comp) (const Node& a, const Node& b);
30 typedef bool (*pred) (const Node& a);
31 
32 struct BinOp
33 {
34  const char* fName;
35  const char* fNameVec;
36  const char* fNameScal;
40  int fPriority;
41  //
42  BinOp (const char* name, const char* namevec, const char* namescal, comp f, pred ln, pred rn, int priority)
43  : fName(name), fNameVec(namevec), fNameScal(namescal), fCompute(f), fLeftNeutral(ln), fRightNeutral(rn), fPriority(priority) { }
44  //
45  Node compute(const Node& a, const Node& b) { return fCompute(a,b); }
46  //
47  bool isRightNeutral(const Node& a) { return fRightNeutral(a); }
48  bool isLeftNeutral(const Node& a) { return fLeftNeutral(a); }
49 };
50 
51 extern BinOp* gBinOpTable[];
52 extern BinOp* gBinOpLateqTable[];
53 
54 
55 enum {
58  kGT, kLT, kGE, kLE, kEQ, kNE,
60 };
61 
62 #endif
const Node(* comp)(const Node &a, const Node &b)
Definition: binop.hh:29
pred fLeftNeutral
Definition: binop.hh:38
Class Node = (type x (int + double + Sym + void*))
Definition: node.hh:75
Definition: binop.hh:58
BinOp(const char *name, const char *namevec, const char *namescal, comp f, pred ln, pred rn, int priority)
Definition: binop.hh:42
A Node is a tagged unions of int, double, symbol and void* used in the implementation of CTrees...
Definition: binop.hh:59
BinOp * gBinOpLateqTable[]
Definition: binop.cpp:52
int fPriority
Definition: binop.hh:40
Definition: binop.hh:56
BinOp * gBinOpTable[]
Definition: binop.cpp:28
Definition: binop.hh:56
Definition: binop.hh:59
bool(* pred)(const Node &a)
Definition: binop.hh:30
pred fRightNeutral
Definition: binop.hh:39
Definition: binop.hh:58
Definition: binop.hh:58
Definition: binop.hh:56
const char * fName
Definition: binop.hh:34
bool isRightNeutral(const Node &a)
Definition: binop.hh:47
const char * fNameScal
Definition: binop.hh:36
Definition: binop.hh:56
const char * name(Symbol *sym)
Returns the name of a symbol.
Definition: symbol.hh:98
Definition: binop.hh:58
Definition: binop.hh:57
Definition: binop.hh:57
Definition: binop.hh:58
Node compute(const Node &a, const Node &b)
Definition: binop.hh:45
Definition: binop.hh:56
Definition: binop.hh:32
bool isLeftNeutral(const Node &a)
Definition: binop.hh:48
Definition: binop.hh:58
const char * fNameVec
Definition: binop.hh:35
Definition: binop.hh:59
comp fCompute
Definition: binop.hh:37