3 #if SIZE_MAX == 0xFFFFFFFF
4 #include <ossia/dataflow/audio_port.hpp>
5 #include <ossia/dataflow/midi_port.hpp>
6 #include <ossia/dataflow/value_port.hpp>
9 #include <ossia/dataflow/dataflow_fwd.hpp>
10 #include <ossia/dataflow/exec_state_facade.hpp>
11 #include <ossia/dataflow/token_request.hpp>
12 #include <ossia/detail/small_vector.hpp>
13 #include <ossia/detail/string_view.hpp>
22 using token_request_vec = ossia::small_vector<token_request, 4>;
23 using simple_token_request_vec = ossia::small_vector<simple_token_request, 4>;
24 inline bool operator==(
const token_request_vec& lhs,
const simple_token_request_vec& rhs)
26 if(lhs.size() != rhs.size())
29 auto it1 = lhs.begin();
30 auto it2 = rhs.begin();
32 for(; it1 < e1; ++it1, ++it2)
42 inline bool operator!=(
const token_request_vec& lhs,
const simple_token_request_vec& rhs)
44 if(lhs.size() != rhs.size())
47 auto it1 = lhs.begin();
48 auto it2 = rhs.begin();
50 for(; it1 < e1; ++it1, ++it2)
59 inline bool operator==(
const simple_token_request_vec& lhs,
const token_request_vec& rhs)
63 inline bool operator!=(
const simple_token_request_vec& lhs,
const token_request_vec& rhs)
68 using inlets = ossia::small_vector<inlet_ptr, 2>;
69 using outlets = ossia::small_vector<outlet_ptr, 2>;
110 class OSSIA_EXPORT graph_node
113 graph_node() noexcept;
114 virtual ~graph_node();
116 [[nodiscard]]
bool enabled() const noexcept {
return !requested_tokens.empty(); }
118 [[nodiscard]]
bool executed() const noexcept {
return m_executed; }
120 void set_start_discontinuous(
bool b) noexcept { m_start_discontinuous = b; }
121 void set_end_discontinuous(
bool b) noexcept { m_end_discontinuous = b; }
123 virtual void prepare(
const execution_state& st) noexcept;
124 [[nodiscard]]
virtual bool consumes(
const execution_state&)
const noexcept;
125 virtual void run(
const token_request&, exec_state_facade) noexcept;
126 [[nodiscard]]
virtual std::string label() const noexcept;
128 [[nodiscard]]
bool has_port_inputs() const noexcept;
129 [[nodiscard]]
bool has_global_inputs() const noexcept;
130 [[nodiscard]]
bool has_local_inputs(const execution_state& st) const noexcept;
132 [[nodiscard]] const inlets& root_inputs() const noexcept {
return m_inlets; }
133 [[nodiscard]]
const outlets& root_outputs() const noexcept {
return m_outlets; }
134 inlets& root_inputs() noexcept {
return m_inlets; }
135 outlets& root_outputs() noexcept {
return m_outlets; }
137 virtual void clear() noexcept;
139 [[nodiscard]]
bool start_discontinuous() const noexcept
141 return m_start_discontinuous;
143 [[nodiscard]]
bool end_discontinuous() const noexcept {
return m_end_discontinuous; }
145 void set_executed(
bool b) noexcept { m_executed = b; }
147 void request(
const ossia::token_request& req) noexcept;
149 void disable() noexcept { requested_tokens.clear(); }
151 void set_logging(
bool b) noexcept { m_logging = b; }
152 [[nodiscard]]
bool logged() const noexcept {
return m_logging; }
154 void set_mute(
bool b) noexcept { m_muted = b; }
155 [[nodiscard]]
bool muted() const noexcept {
return m_muted; }
157 virtual void all_notes_off() noexcept;
158 token_request_vec requested_tokens;
167 bool m_start_discontinuous{};
168 bool m_end_discontinuous{};
173 class OSSIA_EXPORT nonowning_graph_node :
public graph_node
176 using graph_node::graph_node;
177 ~nonowning_graph_node()
override;
179 void clear() noexcept override;
182 template <typename T, typename... Args>
183 auto make_node(const execution_state& st, Args&&... args)
185 auto n = std::make_shared<T>(std::forward<Args>(args)...);
bool muted
Means that the node should not send / receives network messages.
Definition: node_attributes.hpp:104