Rename interpretor to interpreter.
[Faustine.git] / interpreter / preprocessor / faust-0.9.47mr3 / compiler / boxes / boxes.hh
diff --git a/interpreter/preprocessor/faust-0.9.47mr3/compiler/boxes/boxes.hh b/interpreter/preprocessor/faust-0.9.47mr3/compiler/boxes/boxes.hh
new file mode 100644 (file)
index 0000000..fd52d17
--- /dev/null
@@ -0,0 +1,326 @@
+#ifndef _BOXES_
+#define _BOXES_
+
+/************************************************************************
+ ************************************************************************
+    FAUST compiler
+       Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
+    ---------------------------------------------------------------------
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ ************************************************************************
+ ************************************************************************/
+
+
+
+/*****************************************************************************
+******************************************************************************
+                                                       FAUST BOX ALGEBRA
+                                               Y. Orlarey, (c) Grame 2002
+------------------------------------------------------------------------------
+box ::= i | f | p0 | p1 | p3
+         | _ | ! | a:b | a<:b | a,b | a:>b | a~b
+
+ History :
+ ---------
+       2002-06-06 : First version
+
+******************************************************************************
+*****************************************************************************/
+
+#include "tlib.hh"
+#include "signals.hh"
+
+struct Automaton;
+
+/*****************************************************************************
+******************************************************************************
+
+                                                           The Box Language
+
+******************************************************************************
+*****************************************************************************/
+
+
+/*****************************************************************************
+                                                               Identifiers
+*****************************************************************************/
+
+Tree boxIdent(const char* name);
+bool isBoxIdent(Tree t);
+bool isBoxIdent(Tree t, const char** name);
+
+
+/*****************************************************************************
+                                                               Numbers
+*****************************************************************************/
+
+Tree boxInt(int n);
+Tree boxReal(double n);
+
+bool  isBoxInt(Tree t);
+bool  isBoxReal(Tree t);
+
+bool  isBoxInt(Tree t, int* i);
+bool  isBoxReal(Tree t, double* r);
+
+
+/*****************************************************************************
+                                                               Wire and Cut
+*****************************************************************************/
+
+Tree boxWire();
+Tree boxCut();
+
+bool isBoxWire(Tree t);
+bool isBoxCut(Tree t);
+
+
+/*****************************************************************************
+                                               Symbolic Boxes with symbolic slots
+*****************************************************************************/
+
+Tree boxSlot(int id);
+Tree boxSymbolic(Tree slot, Tree body);
+
+bool isBoxSlot(Tree t);
+bool isBoxSymbolic(Tree t);
+
+bool isBoxSlot(Tree t, int* id);
+bool isBoxSymbolic(Tree t, Tree& slot, Tree& body);
+
+
+/*****************************************************************************
+                                                         Composition of Boxes
+*****************************************************************************/
+
+Tree boxSeq   (Tree x, Tree y);
+Tree boxPar   (Tree x, Tree y);
+Tree boxRec      (Tree x, Tree y);
+Tree boxSplit (Tree x, Tree y);
+Tree boxMerge (Tree x, Tree y);
+
+bool isBoxSeq  (Tree t, Tree& x, Tree& y);
+bool isBoxPar  (Tree t, Tree& x, Tree& y);
+bool isBoxRec  (Tree t, Tree& x, Tree& y);
+bool isBoxSplit        (Tree t, Tree& x, Tree& y);
+bool isBoxMerge        (Tree t, Tree& x, Tree& y);
+
+/*****************************************************************************
+                                               Algorithmic Composition of Boxes
+*****************************************************************************/
+
+Tree boxIPar(Tree x, Tree y, Tree z);
+Tree boxISeq(Tree x, Tree y, Tree z);
+Tree boxISum(Tree x, Tree y, Tree z);
+Tree boxIProd(Tree x, Tree y, Tree z);
+
+bool isBoxIPar(Tree t, Tree& x, Tree& y, Tree& z);
+bool isBoxISeq(Tree t, Tree& x, Tree& y, Tree& z);
+bool isBoxISum(Tree t, Tree& x, Tree& y, Tree& z);
+bool isBoxIProd(Tree t, Tree& x, Tree& y, Tree& z);
+
+
+/*****************************************************************************
+                                                         Lambda-Calculus of Boxes
+*****************************************************************************/
+
+Tree buildBoxAbstr     (Tree x, Tree y);
+Tree buildBoxAppl      (Tree x, Tree y);
+
+Tree boxAbstr  (Tree x, Tree y);
+Tree boxAppl   (Tree x, Tree y);
+
+bool isBoxAbstr        (Tree t);
+bool isBoxAppl (Tree t);
+
+bool isBoxAbstr        (Tree t, Tree& x, Tree& y);
+bool isBoxAppl (Tree t, Tree& x, Tree& y);
+
+Tree closure (Tree abstr, Tree genv, Tree vis, Tree lenv);
+
+bool isClosure (Tree t, Tree& abstr, Tree& genv, Tree& vis, Tree& lenv);
+
+// for foo(x,y).faa expressions
+Tree boxAccess (Tree exp, Tree id);
+bool isBoxAccess(Tree t, Tree& exp, Tree& id);
+
+
+/*****************************************************************************
+                        Boxes with local definitions
+*****************************************************************************/
+
+Tree boxWithLocalDef (Tree body, Tree ldef);
+bool isBoxWithLocalDef (Tree t, Tree& body, Tree& ldef);
+
+
+/*****************************************************************************
+                        Modification of local definitions
+*****************************************************************************/
+
+Tree boxModifLocalDef (Tree body, Tree ldef);
+bool isBoxModifLocalDef (Tree t, Tree& body, Tree& ldef);
+
+
+/*****************************************************************************
+                                                        Error Boxe
+*****************************************************************************/
+
+Tree boxError();
+bool isBoxError(Tree t);
+
+/*****************************************************************************
+                                                        Primitive Boxes (n -> 1)
+*****************************************************************************/
+
+typedef Tree (*prim0)();
+typedef Tree (*prim1)(Tree x);
+typedef Tree (*prim2)(Tree x, Tree y);
+typedef Tree (*prim3)(Tree x, Tree y, Tree z);
+typedef Tree (*prim4)(Tree w, Tree x, Tree y, Tree z);
+typedef Tree (*prim5)(Tree v, Tree w, Tree x, Tree y, Tree z);
+
+Tree boxPrim0 (prim0 foo);
+Tree boxPrim1 (prim1 foo);
+Tree boxPrim2 (prim2 foo);
+Tree boxPrim3 (prim3 foo);
+Tree boxPrim4 (prim4 foo);
+Tree boxPrim5 (prim5 foo);
+
+bool isBoxPrim0        (Tree s);
+bool isBoxPrim1        (Tree s);
+bool isBoxPrim2        (Tree s);
+bool isBoxPrim3        (Tree s);
+bool isBoxPrim4        (Tree s);
+bool isBoxPrim5        (Tree s);
+
+bool isBoxPrim0        (Tree s, prim0* p);
+bool isBoxPrim1        (Tree s, prim1* p);
+bool isBoxPrim2        (Tree s, prim2* p);
+bool isBoxPrim3        (Tree s, prim3* p);
+bool isBoxPrim4        (Tree s, prim4* p);
+bool isBoxPrim5        (Tree s, prim5* p);
+
+
+/*****************************************************************************
+                                                        Foreign Functions
+*****************************************************************************/
+
+Tree boxFFun (Tree ff);
+bool isBoxFFun (Tree s);
+bool isBoxFFun (Tree s, Tree& ff);
+
+
+Tree boxFConst      (Tree type, Tree name, Tree file);
+bool isBoxFConst    (Tree s);
+bool isBoxFConst    (Tree s, Tree& type, Tree& name, Tree& file);
+
+
+Tree boxFVar      (Tree type, Tree name, Tree file);
+bool isBoxFVar    (Tree s);
+bool isBoxFVar    (Tree s, Tree& type, Tree& name, Tree& file);
+
+
+/*****************************************************************************
+                                                        Modules
+*****************************************************************************/
+
+Tree boxEnvironment();
+bool isBoxEnvironment (Tree s);
+
+Tree boxComponent (Tree filename);
+bool isBoxComponent (Tree s, Tree& filename);
+
+Tree boxLibrary (Tree filename);
+bool isBoxLibrary (Tree s, Tree& filename);
+
+Tree importFile(Tree filename);
+bool isImportFile(Tree s, Tree& filename);
+
+
+/*****************************************************************************
+                                                        User Interface Elements
+*****************************************************************************/
+
+Tree boxButton          (Tree label);
+bool isBoxButton (Tree s);
+bool isBoxButton (Tree s, Tree& label);
+
+Tree boxCheckbox   (Tree label);
+bool isBoxCheckbox (Tree s);
+bool isBoxCheckbox (Tree s, Tree& label);
+
+Tree boxVSlider   (Tree label, Tree cur, Tree min, Tree max, Tree step);
+bool isBoxVSlider (Tree s);
+bool isBoxVSlider (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
+
+Tree boxHSlider   (Tree label, Tree cur, Tree min, Tree max, Tree step);
+bool isBoxHSlider (Tree s);
+bool isBoxHSlider (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
+
+Tree boxNumEntry   (Tree label, Tree cur, Tree min, Tree max, Tree step);
+bool isBoxNumEntry (Tree s);
+bool isBoxNumEntry (Tree s, Tree& label, Tree& cur, Tree& min, Tree& max, Tree& step);
+
+Tree boxVGroup   (Tree label, Tree x);
+bool isBoxVGroup (Tree s);
+bool isBoxVGroup (Tree s, Tree& label, Tree& x);
+
+Tree boxHGroup   (Tree label, Tree x);
+bool isBoxHGroup (Tree s);
+bool isBoxHGroup (Tree s, Tree& label, Tree& x);
+
+Tree boxTGroup   (Tree label, Tree x);
+bool isBoxTGroup (Tree s);
+bool isBoxTGroup (Tree s, Tree& label, Tree& x);
+
+// GUI outputs
+Tree boxVBargraph   (Tree label, Tree min, Tree max);
+bool isBoxVBargraph (Tree s);
+bool isBoxVBargraph (Tree s, Tree& label, Tree& min, Tree& max);
+
+Tree boxHBargraph   (Tree label, Tree min, Tree max);
+bool isBoxHBargraph (Tree s);
+bool isBoxHBargraph (Tree s, Tree& label, Tree& min, Tree& max);
+
+
+/*****************************************************************************
+                                                        case (pattern matching)
+*****************************************************************************/
+Tree boxCase           (Tree rules);
+bool isBoxCase         (Tree s);
+bool isBoxCase         (Tree s, Tree& rules);
+
+Tree boxPatternMatcher         (Automaton* a, int state, Tree env, Tree origRules, Tree revParamList);
+bool isBoxPatternMatcher       (Tree s);
+bool isBoxPatternMatcher       (Tree s, Automaton*& a, int& state, Tree& env, Tree& origRules, Tree& revParamList);
+
+// wrap an id into a pattern variable
+Tree boxPatternVar     (Tree id);
+bool isBoxPatternVar(Tree s, Tree& id);
+
+
+/*****************************************************************************
+******************************************************************************
+
+                                                           Box Algorithms
+
+******************************************************************************
+*****************************************************************************/
+
+// return the number of input
+bool getBoxType (Tree box, int* inum, int* onum);
+
+
+#endif