| 
							- #pragma once
 - #include <common.hpp>
 - #include <engine/Module.hpp>
 - #include <engine/Cable.hpp>
 - #include <engine/ParamHandle.hpp>
 - #include <vector>
 - 
 - 
 - namespace rack {
 - namespace engine {
 - 
 - 
 - struct Engine {
 - 	struct Internal;
 - 	Internal* internal;
 - 
 - 	Engine();
 - 	~Engine();
 - 	/** Starts engine thread. */
 - 	void start();
 - 	/** Stops engine thread. */
 - 	void stop();
 - 	void setPaused(bool paused);
 - 	bool isPaused();
 - 	float getSampleRate();
 - 	/** Returns the inverse of the current sample rate. */
 - 	float getSampleTime();
 - 	/** Causes worker threads to block on a mutex instead of spinlock.
 - 	Call this in your Module::step() method to hint that the operation will take more than ~0.1 ms.
 - 	*/
 - 	void yieldWorkers();
 - 	uint64_t getFrame();
 - 
 - 	// Modules
 - 	/** Adds a module to the rack engine.
 - 	The module ID must not be taken by another module.
 - 	If the module ID is -1, an ID is automatically assigned.
 - 	Does not transfer pointer ownership.
 - 	*/
 - 	void addModule(Module* module);
 - 	void removeModule(Module* module);
 - 	Module* getModule(int moduleId);
 - 	void resetModule(Module* module);
 - 	void randomizeModule(Module* module);
 - 	void bypassModule(Module* module, bool bypass);
 - 
 - 	// Cables
 - 	/** Adds a cable to the rack engine.
 - 	The cable ID must not be taken by another cable.
 - 	If the cable ID is -1, an ID is automatically assigned.
 - 	Does not transfer pointer ownership.
 - 	*/
 - 	void addCable(Cable* cable);
 - 	void removeCable(Cable* cable);
 - 
 - 	// Params
 - 	void setParam(Module* module, int paramId, float value);
 - 	float getParam(Module* module, int paramId);
 - 	void setSmoothParam(Module* module, int paramId, float value);
 - 	float getSmoothParam(Module* module, int paramId);
 - 
 - 	// ParamHandles
 - 	void addParamHandle(ParamHandle* paramHandle);
 - 	void removeParamHandle(ParamHandle* paramHandle);
 - 	/** Returns the unique ParamHandle for the given paramId */
 - 	ParamHandle* getParamHandle(int moduleId, int paramId);
 - 	/** Use getParamHandle(int, int) instead. */
 - 	DEPRECATED ParamHandle* getParamHandle(Module* module, int paramId);
 - 	/** Sets the ParamHandle IDs and module pointer.
 - 	If `overwrite` is true and another ParamHandle points to the same param, unsets that one and replaces it with the given handle.
 - 	*/
 - 	void updateParamHandle(ParamHandle* paramHandle, int moduleId, int paramId, bool overwrite = true);
 - };
 - 
 - 
 - } // namespace engine
 - } // namespace rack
 
 
  |