OSSIA
Open Scenario System for Interactive Application
direct_policy.hpp
1 #pragma once
2 #include <ossia/dataflow/execution/execution_policy.hpp>
3 #include <ossia/network/base/bundle.hpp>
4 
5 #include <blockingconcurrentqueue.h>
6 
7 #include <thread>
8 
9 namespace ossia
10 {
11 // If we do not use the local state, we can use this policy instead
12 struct direct_execution_state_policy : execution_state_policy
13 {
14  direct_execution_state_policy();
15  ~direct_execution_state_policy();
16 
17  void commit() override;
18 
19  void clear_local_state() override;
20 
21  bool find_and_copy(net::parameter_base& addr, inlet& in) override;
22  bool in_local_scope(net::parameter_base& other) const override;
23 
24  void insert(ossia::net::parameter_base& dest, const ossia::value_port& v) override;
25  void insert(ossia::audio_parameter& dest, const audio_port& v) override;
26  void insert(ossia::net::midi::midi_parameter& dest, const midi_port& v) override;
27 
28  void process_messages();
29  void process_midi();
30 
31  struct T : moodycamel::ConcurrentQueueDefaultTraits
32  {
33  static constexpr std::size_t CQ_BLOCK_SIZE = 2048;
34  };
35 
36  moodycamel::BlockingConcurrentQueue<ossia::bundle_element, T> m_messagesToApply;
37 
38  static constexpr int max_threads = 16;
39  struct net_thread
40  {
41  std::thread thread;
42  } m_threads[max_threads];
43 
44  std::thread m_midiThread;
45 
46  std::atomic_bool m_startFlag{};
47  std::atomic_bool m_stopFlag{};
48 
49  struct audio_msg
50  {
51  const ossia::audio_port* src{};
52  ossia::audio_parameter* dst{};
53  };
54  ossia::mpmc_queue<audio_msg> m_audioQueue;
55 
56  struct midi_msg
57  {
58  const ossia::midi_port* src{};
59  ossia::net::midi::midi_parameter* dst{};
60  };
61  ossia::mpmc_queue<midi_msg> m_midiQueue;
62 };
63 }
The parameter_base class.
Definition: ossia/network/base/parameter.hpp:48
Definition: git_info.h:7