X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/c7f552fd8888da2f0d8cfb228fe0f28d3df3a12c..b4b6f2ea75b9f0f3ca918f5b84016610bf7a4d4f:/interpretor/preprocessor/faust-0.9.47mr3/compiler/boxes/boxes.hh diff --git a/interpretor/preprocessor/faust-0.9.47mr3/compiler/boxes/boxes.hh b/interpretor/preprocessor/faust-0.9.47mr3/compiler/boxes/boxes.hh new file mode 100644 index 0000000..fd52d17 --- /dev/null +++ b/interpretor/preprocessor/faust-0.9.47mr3/compiler/boxes/boxes.hh @@ -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