FAUST compiler  0.9.9.6b8
doc_compile.hh
Go to the documentation of this file.
00001 /************************************************************************
00002  ************************************************************************
00003     FAUST compiler
00004     Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
00005     ---------------------------------------------------------------------
00006     This program is free software; you can redistribute it and/or modify
00007     it under the terms of the GNU General Public License as published by
00008     the Free Software Foundation; either version 2 of the License, or
00009     (at your option) any later version.
00010 
00011     This program is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014     GNU General Public License for more details.
00015 
00016     You should have received a copy of the GNU General Public License
00017     along with this program; if not, write to the Free Software
00018     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00019  ************************************************************************
00020  ************************************************************************/
00021 
00022 
00023 
00024 #ifndef _DOC_COMPILE_SCAL_
00025 #define _DOC_COMPILE_SCAL_
00026 
00027 
00028 #include <string>
00029 #include <list>
00030 #include <map>
00031 
00032 #include "sigtyperules.hh"
00033 #include "occurences.hh"
00034 #include "property.hh"
00035 #include "signals.hh"
00036 #include "lateq.hh"
00037 #include "Text.hh"
00038 #include "doc_Text.hh"
00039 #include "description.hh"
00040 
00041 
00043 
00046 
00047 
00048 class DocCompiler
00049 {
00050   protected:
00051     
00052     property<string>            fCompileProperty;
00053     property<string>            fVectorProperty;
00054 
00055     Lateq*          fLateq;
00056     Description*    fDescription;
00057 
00058     static map<string, int>     fIDCounters;
00059     Tree                        fSharingKey;
00060     OccMarkup                   fOccMarkup;
00061     int                         fPriority;  
00062 
00063 
00064   public:
00065 
00066     DocCompiler (int numInputs, int numOutputs) 
00067     :
00068     fLateq(new Lateq(numInputs, numOutputs)),
00069     fDescription(0), 
00070     fPriority(0)
00071     {}
00072     
00073     DocCompiler ( Lateq* k, int priority) 
00074     : 
00075     fLateq(k),
00076     fDescription(0), 
00077     fPriority(priority)
00078     {}
00079     
00080     ~DocCompiler()
00081     {}
00082     
00083     Lateq*          compileLateq (Tree L, Lateq* compiledEqn);
00084     Tree            annotate(Tree L0);  
00085     
00086     Lateq*          getLateq()                          { return (Lateq*)fLateq; }
00087     void            setDescription(Description* descr)  { fDescription= descr; }
00088     Description*    getDescription()                    { return fDescription; }
00089     
00090     
00091   protected:
00092 
00093     string      CS (Tree sig, int priority);
00094     string      generateCode (Tree sig, int priority);
00095     string      generateCacheCode(Tree sig, const string& exp) ;
00096     string      generateVariableStore(Tree sig, const string& exp);
00097 
00098     string      getFreshID (const string& prefix);
00099     
00100     bool        getCompiledExpression(Tree sig, string& name);
00101     string      setCompiledExpression(Tree sig, const string& name);
00102         
00103     void        setVectorNameProperty(Tree sig, const string& vecname);
00104     bool        getVectorNameProperty(Tree sig, string& vecname);
00105 
00106     int         getSharingCount(Tree t);
00107     void        setSharingCount(Tree t, int count);
00108     void        sharingAnalysis(Tree t);
00109     void        sharingAnnotation(int vctxt, Tree t);
00110     
00111     bool        isShortEnough(string& s, unsigned int max);
00112 
00113     
00114     /* Code generation. */
00115     
00116     string      generateXtended     (Tree sig, int priority);
00117     string      generateFixDelay    (Tree sig, Tree arg, Tree size, int priority);
00118     string      generatePrefix      (Tree sig, Tree x, Tree e, int priority);
00119     string      generateIota        (Tree sig, Tree arg);
00120     string      generateBinOp       (Tree sig, int opcode, Tree arg1, Tree arg2, int priority);
00121     
00122     string      generateFFun        (Tree sig, Tree ff, Tree largs, int priority);
00123     
00124     string      generateInput       (Tree sig, const string& idx);
00125     string      generateOutput      (Tree sig, const string& idx, const string& arg1);
00126 
00127 //    string      generateDocReadOnlyTbl  (Tree sig, Tree size, Tree content, Tree ridx);
00128 //    string      generateDocReadWriteTbl (Tree sig, Tree size, Tree content, Tree widx, Tree wsig, Tree ridx);
00129     string      generateDocConstantTbl  (Tree sig, Tree size, Tree content);
00130     string      generateDocWriteTbl     (Tree sig, Tree size, Tree content, Tree widx, Tree wsig);
00131     string      generateDocAccessTbl    (Tree sig, Tree tbl, Tree ridx);
00132 
00133     string      generateSelect2     (Tree sig, Tree sel, Tree s1, Tree s2, int priority);
00134     string      generateSelect3     (Tree sig, Tree sel, Tree s1, Tree s2, Tree s3, int priority);
00135     
00136     string      generateRecProj     (Tree sig, Tree exp, int i, int priority);
00137     void        generateRec         (Tree sig, Tree var, Tree le, int priority);
00138     
00139     string      generateIntCast     (Tree sig, Tree x, int priority);
00140     string      generateFloatCast   (Tree sig, Tree x, int priority);
00141     
00142     string      generateButton      (Tree sig, Tree label);
00143     string      generateCheckbox    (Tree sig, Tree label);
00144     string      generateVSlider     (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
00145     string      generateHSlider     (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
00146     string      generateNumEntry    (Tree sig, Tree label, Tree cur, Tree min, Tree max, Tree step);
00147     
00148     string      generateVBargraph   (Tree sig, Tree label, Tree min, Tree max, const string& exp);
00149     string      generateHBargraph   (Tree sig, Tree label, Tree min, Tree max, const string& exp);
00150     string      generateAttach      (Tree sig, Tree x, Tree y, int priority);
00151 
00152     string      generateNumber(Tree sig, const string& exp);
00153     string      generateFConst (Tree sig, const string& file, const string& name);
00154     string      generateFVar (Tree sig, const string& file, const string& name);
00155     
00156     string      generateDelayVec(Tree sig, const string& exp, const string& ctype, const string& vname, int mxd);
00157     string      generateDelayVecNoTemp(Tree sig, const string& exp, const string& ctype, const string& vname, int mxd);
00158     void        generateDelayLine(const string& ctype, const string& vname, int mxd, const string& exp);
00159 
00160     void        getTypedNames(Type t, const string& prefix, string& ctype, string& vname);
00161     void        printGCCall(Tree sig, const string& calledFunction);
00162 
00163         
00164     /* Managment of user interface elements. */
00165 
00166     void        getUIDocInfos(Tree path, string& label, string& unit);
00167     string      getUIDir (Tree pathname);
00168     string      prepareBinaryUI(const string& name, Tree pathname);
00169     string      prepareIntervallicUI(const string& name, Tree path, Tree tcur, Tree tmin, Tree tmax);
00170 };
00171 
00172 #endif