1 /************************************************************************
2  ************************************************************************
3     FAUST compiler
4     Copyright (C) 2003-2018 GRAME, Centre National de Creation Musicale
5     ---------------------------------------------------------------------
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10 
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15 
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  ************************************************************************
20  ************************************************************************/
21 
22 #ifndef _JAVA_CODE_CONTAINER_H
23 #define _JAVA_CODE_CONTAINER_H
24 
25 #include "code_container.hh"
26 #include "dsp_factory.hh"
27 #include "java_instructions.hh"
28 
29 using namespace std;
30 
31 class JAVACodeContainer : public virtual CodeContainer {
32    protected:
33     JAVAInstVisitor fCodeProducer;
34     std::ostream*   fOut;
35     string          fSuperKlassName;
36 
37    public:
JAVACodeContainer(const string & name,const string & super,int numInputs,int numOutputs,std::ostream * out)38     JAVACodeContainer(const string& name, const string& super, int numInputs, int numOutputs, std::ostream* out)
39         : fCodeProducer(out), fOut(out), fSuperKlassName(super)
40     {
41         initialize(numInputs, numOutputs);
42         fKlassName = name;
43     }
~JAVACodeContainer()44     virtual ~JAVACodeContainer() {}
45 
46     virtual void produceClass();
47     virtual void generateCompute(int tab) = 0;
48     void         produceInternal();
49 
50     virtual dsp_factory_base* produceFactory();
51 
printHeader()52     virtual void printHeader() { CodeContainer::printHeader(*fOut); }
53 
54     CodeContainer* createScalarContainer(const string& name, int sub_container_type);
55 
56     static CodeContainer* createContainer(const string& name, const string& super, int numInputs, int numOutputs,
57                                           ostream* dst = new stringstream());
58 };
59 
60 class JAVAScalarCodeContainer : public JAVACodeContainer {
61    protected:
62    public:
63     JAVAScalarCodeContainer(const string& name, const string& super, int numInputs, int numOutputs, std::ostream* out,
64                             int sub_container_type);
65     virtual ~JAVAScalarCodeContainer();
66 
67     void generateCompute(int tab);
68 };
69 
70 #endif
71