2#include <ossia/audio/audio_parameter.hpp>
3#include <ossia/dataflow/audio_lock.hpp>
4#include <ossia/dataflow/data_copy.hpp>
5#include <ossia/dataflow/execution/local_state_execution_policy.hpp>
6#include <ossia/dataflow/execution_state.hpp>
7#include <ossia/protocols/midi/detail/midi_impl.hpp>
8#include <ossia/protocols/midi/midi_node.hpp>
14struct local_pull_visitor
16 local_state_execution_policy& st;
18 bool operator()(value_port& val)
const
20 OSSIA_EXEC_STATE_LOCK_READ(st);
21 auto it = st.m_valueState.find(addr);
22 if(it != st.m_valueState.end() && !it->second.empty())
24 copy_data{}(it->second, val);
30 bool operator()(audio_port& val)
const
32#if defined(OSSIA_PROTOCOL_AUDIO)
33 OSSIA_EXEC_STATE_LOCK_READ(st);
34 auto it = st.m_audioState.find(
static_cast<ossia::audio_parameter*
>(addr));
35 if(it != st.m_audioState.end() && !it->second.empty())
37 copy_data{}(it->second, val);
44 bool operator()(midi_port& val)
const
46#if defined(OSSIA_PROTOCOL_MIDI)
47 OSSIA_EXEC_STATE_LOCK_READ(st);
48 auto it = st.m_midiState.find(addr);
49 if(it != st.m_midiState.end() && !it->second.empty())
51 copy_data{}(it->second, val);
58 [[noreturn]]
bool operator()(texture_port& val)
const =
delete;
59 [[noreturn]]
bool operator()(geometry_port& val)
const =
delete;
61 bool operator()()
const {
return false; }
64struct global_pull_visitor
66 ossia::execution_state& state;
67 const net::parameter_base& out;
68 void operator()(value_port& val)
const
72 copy_data{}(out, val);
76 auto it = state.m_receivedValues.find(
const_cast<net::parameter_base*
>(&out));
77 if(it != state.m_receivedValues.end())
79 copy_data{}(*it->first, it->second, val);
84 void operator()(audio_port& val)
const
86#if defined(OSSIA_PROTOCOL_AUDIO)
88 auto aa =
dynamic_cast<const audio_parameter*
>(&out);
91 auto aa =
static_cast<const audio_parameter*
>(&out);
93 aa->clone_value(val.get());
97 void operator()(midi_port& val)
const
99#if defined(OSSIA_PROTOCOL_MIDI)
100 auto& node = out.get_node();
101 auto& dev = node.get_device();
102 auto& proto = dev.get_protocol();
110 auto it = state.m_receivedMidi.find(midi);
111 if(it != state.m_receivedMidi.end())
113 for(
const libremidi::ump& v : it->second.messages)
115 val.messages.push_back(v);
121 [[noreturn]]
void operator()(texture_port& val)
const =
delete;
122 [[noreturn]]
void operator()(geometry_port& val)
const =
delete;
124 void operator()()
const { }
127struct global_pull_node_visitor
129 ossia::execution_state& state;
130 const net::node_base& out;
131 void operator()(value_port& val)
const { val.write_value(ossia::net::to_map(out), 0); }
133 void operator()(audio_port& val)
const
138 void operator()(midi_port& val)
const
140#if defined(OSSIA_PROTOCOL_MIDI)
142 auto& dev = node.get_device();
143 auto& proto = dev.get_protocol();
151 auto it = state.m_receivedMidi.find(midi);
152 if(it != state.m_receivedMidi.end())
156 for(
const libremidi::ump& v : it->second.messages)
158 val.messages.push_back(v);
163 for(
const libremidi::ump& v : it->second.messages)
165 if(v.get_channel() == channel)
166 val.messages.push_back(v);
173 [[noreturn]]
void operator()(texture_port& val)
const =
delete;
174 [[noreturn]]
void operator()(geometry_port& val)
const =
delete;
176 void operator()()
const { }
Definition midi_stream.hpp:33
virtual std::optional< int > stream_channel(const node_base &n) const noexcept
Definition midi_stream.cpp:7
The parameter_base class.
Definition ossia/network/base/parameter.hpp:48