2024-01-30 18:09:57 +00:00
|
|
|
#ifndef muz_COMPILER_HPP
|
|
|
|
#define muz_COMPILER_HPP
|
|
|
|
|
|
|
|
#include "commons.hpp"
|
|
|
|
#include "Node.hpp"
|
|
|
|
#include "AudioConf.hpp"
|
|
|
|
#include "Signal.hpp"
|
|
|
|
|
|
|
|
namespace muz
|
|
|
|
{
|
|
|
|
MUZ_ERROR(compile_error);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a signal given an abstract syntax tree.
|
|
|
|
* @see Signal
|
|
|
|
* @see Parser
|
|
|
|
* @see Node
|
|
|
|
**/
|
|
|
|
class Compiler
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
explicit Compiler(AudioConf const& conf);
|
|
|
|
virtual ~Compiler();
|
|
|
|
|
|
|
|
std::vector<std::unique_ptr<Signal>> compile(std::shared_ptr<Node> node);
|
|
|
|
void compile_node(std::shared_ptr<Node> node);
|
2024-01-31 09:23:03 +00:00
|
|
|
void execute_cmd(std::string const& name, std::shared_ptr<Node> node);
|
2024-01-30 18:09:57 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
AudioConf const& m_conf;
|
|
|
|
std::vector<std::unique_ptr<Signal>> m_signals;
|
|
|
|
std::vector<std::unique_ptr<Signal>> m_outputs;
|
|
|
|
|
|
|
|
// signal stack
|
|
|
|
// ------------
|
|
|
|
void push(std::unique_ptr<Signal> signal);
|
|
|
|
std::unique_ptr<Signal> pop();
|
|
|
|
|
|
|
|
void check_cmd_arity(Node const& node, int arity);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|