-/************************************************************************
- ************************************************************************
- 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