New directory tree, with preprocessor/ inside interpretor/.
[Faustine.git] / interpretor / preprocessor / faust-0.9.47mr3 / compiler / headers / compile_scal.hh
diff --git a/interpretor/preprocessor/faust-0.9.47mr3/compiler/headers/compile_scal.hh b/interpretor/preprocessor/faust-0.9.47mr3/compiler/headers/compile_scal.hh
new file mode 100644 (file)
index 0000000..8ca2361
--- /dev/null
@@ -0,0 +1,160 @@
+/************************************************************************
+ ************************************************************************
+    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.
+ ************************************************************************
+ ************************************************************************/
+
+
+
+#ifndef _COMPILE_SCAL_
+#define _COMPILE_SCAL_
+
+#include <utility>
+#include "compile.hh"
+#include "sigtyperules.hh"
+#include "sigraterules.hh"
+#include "occurences.hh"
+#include "property.hh"
+
+////////////////////////////////////////////////////////////////////////
+/**
+ * Compile a list of FAUST signals into a scalar C++ class
+ */
+///////////////////////////////////////////////////////////////////////
+
+class ScalarCompiler : public Compiler
+{
+  protected:
+    property<string>            fCompileProperty;
+    property<string>            fVectorProperty;
+    property<pair<string,string> >  fStaticInitProperty;        // property added to solve 20101208 kjetil bug
+    property<pair<string,string> >  fInstanceInitProperty;      // property added to solve 20101208 kjetil bug
+
+       static map<string, int>         fIDCounters;
+       Tree                            fSharingKey;
+       OccMarkup                                       fOccMarkup;
+    bool                                               fHasIota;
+
+    RateInferrer*               fRates;
+
+  public:
+
+       ScalarCompiler ( const string& name, const string& super, int numInputs, int numOutputs) :
+               Compiler(name,super,numInputs,numOutputs,false),
+        fHasIota(false),
+        fRates(0)
+       {}
+       
+       ScalarCompiler ( Klass* k) : 
+               Compiler(k),
+        fHasIota(false)
+       {}
+       
+       virtual void            compileMultiSignal  (Tree lsig);
+       virtual void            compileSingleSignal (Tree lsig);
+
+
+  protected:
+
+    virtual string      CS (Tree sig);
+    virtual string      generateCode (Tree sig);
+    virtual string      generateCacheCode(Tree sig, const string& exp) ;
+
+    virtual string      generateVariableStore(Tree sig, const string& exp);
+
+       string          getFreshID (const string& prefix);
+
+       void            compilePreparedSignalList (Tree lsig);
+       Tree            prepare(Tree L0);
+       Tree            prepare2 (Tree L0);
+       
+       
+       bool            getCompiledExpression(Tree sig, string& name);
+       string          setCompiledExpression(Tree sig, const string& name);
+
+       void            setVectorNameProperty(Tree sig, const string& vecname);
+       bool            getVectorNameProperty(Tree sig, string& vecname);
+
+       int             getSharingCount(Tree t);
+       void            setSharingCount(Tree t, int count);
+       void            sharingAnalysis(Tree t);
+       void            sharingAnnotation(int vctxt, Tree t);
+       
+       
+       // generation du code
+       
+       string          generateXtended         (Tree sig);
+       virtual string          generateFixDelay        (Tree sig, Tree arg, Tree size);
+       string          generatePrefix          (Tree sig, Tree x, Tree e);
+       string          generateIota            (Tree sig, Tree arg);
+       string          generateBinOp           (Tree sig, int opcode, Tree arg1, Tree arg2);
+       
+       string          generateFFun            (Tree sig, Tree ff, Tree largs);
+       
+       string          generateInput           (Tree sig, const string& idx);
+       string          generateOutput          (Tree sig, const string& idx, const string& arg1);
+       
+       string          generateTable           (Tree sig, Tree tsize, Tree content);
+       string          generateStaticTable     (Tree sig, Tree tsize, Tree content);
+       string          generateWRTbl           (Tree sig, Tree tbl, Tree idx, Tree data);
+       string          generateRDTbl           (Tree sig, Tree tbl, Tree idx);
+       string          generateSigGen          (Tree sig, Tree content);
+       string          generateStaticSigGen(Tree sig, Tree content);
+       
+       string          generateSelect2         (Tree sig, Tree sel, Tree s1, Tree s2);
+       string          generateSelect3         (Tree sig, Tree sel, Tree s1, Tree s2, Tree s3);
+       
+       string          generateRecProj         (Tree sig, Tree exp, int i);
+    void        generateRec         (Tree sig, Tree var, Tree le);
+       
+       string          generateIntCast         (Tree sig, Tree x);
+       string          generateFloatCast       (Tree sig, Tree x);
+       
+       string          generateButton          (Tree sig, Tree label);
+       string          generateCheckbox        (Tree sig, Tree label);
+       string          generateVSlider         (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
+       string          generateHSlider         (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
+       string          generateNumEntry        (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
+       
+       string          generateVBargraph       (Tree sig, Tree label, Tree min, Tree max, const string& exp);
+       string          generateHBargraph       (Tree sig, Tree label, Tree min, Tree max, const string& exp);
+
+       string          generateNumber(Tree sig, const string& exp);
+    string      generateFConst (Tree sig, const string& file, const string& name);
+    string      generateFVar (Tree sig, const string& file, const string& name);
+       
+       virtual string          generateDelayVec(Tree sig, const string& exp, const string& ctype, const string& vname, int mxd);
+       string          generateDelayVecNoTemp(Tree sig, const string& exp, const string& ctype, const string& vname, int mxd);
+       //string                generateDelayVecWithTemp(Tree sig, const string& exp, const string& ctype, const string& vname, int mxd);
+    virtual void        generateDelayLine(const string& ctype, const string& vname, int mxd, const string& exp);
+
+    // up et down sampling
+    virtual string             generateUpSample        (Tree sig, Tree arg, Tree size);
+    virtual string             generateDownSample      (Tree sig, Tree arg, Tree size);
+
+
+
+       void            getTypedNames(Type t, const string& prefix, string& ctype, string& vname);
+       void            ensureIotaCode();
+    int         pow2limit(int x);
+
+
+
+};
+
+#endif