File: fbc_executor.hh

package info (click to toggle)
faust 2.79.3%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 397,496 kB
  • sloc: cpp: 278,433; ansic: 116,164; javascript: 18,529; vhdl: 14,052; sh: 13,884; java: 5,900; objc: 3,852; python: 3,222; makefile: 2,655; cs: 1,672; lisp: 1,146; ruby: 954; yacc: 586; xml: 471; lex: 247; awk: 110; tcl: 26
file content (92 lines) | stat: -rw-r--r-- 3,184 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/************************************************************************
 ************************************************************************
    FAUST compiler
    Copyright (C) 2019-2020 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 Lesser General Public License as published by
    the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ************************************************************************
 ************************************************************************/

#ifndef _FBC_EXECUTOR_H
#define _FBC_EXECUTOR_H

#include "dsp_aux.hh"
#include "faust/gui/CGlue.h"
#include "interpreter_bytecode.hh"

typedef std::map<std::string, Soundfile*> soundTable;

/*
 * The base class for Interpreter and mixed Interpreter/Compiler.
 */
template <class REAL>
class FBCExecutor {
   protected:
    soundTable fSoundTable;

   public:
    virtual ~FBCExecutor() {}

    virtual void executeBuildUserInterface(FIRUserInterfaceBlockInstruction<REAL>* block,
                                           UIInterface*                            glue) {};
    virtual void executeBlock(FBCBlockInstruction<REAL>* block) {};

    // Possibly compile (when using LLVM or MIR)
    virtual void compileBlock(FBCBlockInstruction<REAL>* block) {}

    virtual void setIntValue(int offset, int value) {}
    virtual int  getIntValue(int offset) { return -1; }

    virtual void setInput(int offset, REAL* buffer) {}
    virtual void setOutput(int offset, REAL* buffer) {}

    virtual void updateInputControls() {}
    virtual void updateOutputControls() {}

    virtual void dumpMemory(std::vector<FBCBlockInstruction<REAL>*> blocks, const std::string& name,
                            const std::string& filename)
    {
    }
};

/*
 * The base class for a Compiler to compile the hot 'compute' function.
 */
template <class REAL>
class FBCExecuteFun {
   protected:
    soundTable& fSoundTable;

   public:
    FBCExecuteFun() {}
    // The FBC block used in the 'compute' function.
    FBCExecuteFun(FBCBlockInstruction<REAL>* fbc_block, soundTable& sound_table)
        : fSoundTable(sound_table)
    {
    }
    virtual ~FBCExecuteFun() {}

    /*
     * The function to be executed each cycle.
     *
     * @param int_heap - the integer heap
     * @param real_heap - the REAL heap
     * @param inputs - the audio inputs
     * @param outputs - the audio outputs
     */
    virtual void execute(int* int_heap, REAL* real_heap, REAL** inputs, REAL** outputs) {}
};

#endif