OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
value_port.hpp
1#pragma once
2#include <ossia/dataflow/timed_value.hpp>
3#include <ossia/dataflow/typed_value.hpp>
4#include <ossia/dataflow/value_vector.hpp>
6#include <ossia/network/common/complex_type.hpp>
8
9#include <optional>
10
11namespace ossia
12{
13enum data_mix_method : int8_t
14{
15 mix_append,
16 mix_replace,
17 mix_merge
18};
19
20struct OSSIA_EXPORT value_port
21{
22 static const constexpr int which = 2;
24 void write_value(const ossia::value& v, int64_t timestamp);
25
26 void write_value(ossia::value&& v, int64_t timestamp);
27
28 void add_local_value(const ossia::typed_value& other);
29
30 void add_port_values(const ossia::value_port& other);
31
32 void add_global_values(
33 const ossia::net::parameter_base& param, const value_vector<ossia::value>& vec);
34
35 void add_global_value(const ossia::net::parameter_base& other, ossia::value v);
36
37 void set_data(const value_vector<ossia::timed_value>& vec);
38
39 void clear();
40
41 [[nodiscard]] const value_vector<ossia::timed_value>& get_data() const noexcept
42 {
43 return data;
44 }
45 value_vector<ossia::timed_value>& get_data() noexcept { return data; }
46
47 ossia::domain domain;
48
50 ossia::complex_type type;
51
54 ossia::unit_t address_unit;
55
67 [[nodiscard]] ossia::complex_type effective_type() const noexcept
68 {
69 if(type)
70 return type;
71 if(address_unit)
72 return address_unit;
73 return {};
74 }
75
77 [[nodiscard]] bool has_effective_type() const noexcept
78 {
79 return bool(address_unit) || bool(type);
80 }
81
83 [[nodiscard]] const ossia::unit_t* effective_unit() const noexcept
84 {
85 if(auto u = type.target<ossia::unit_t>(); u && bool(*u))
86 return u;
87 if(address_unit)
88 return &address_unit;
89 return type.target<ossia::unit_t>();
90 }
91
93 // std::optional<ossia::time_value> tween_date;
94
95 bool is_event{};
96 data_mix_method mix_method{};
97
98private:
99 value_vector<ossia::timed_value> data;
100};
101
102struct value_delay_line
103{
104 std::vector<value_vector<ossia::typed_value>> data;
105};
106
107OSSIA_EXPORT
108void process_control_value(
109 ossia::value& v, const ossia::domain& source_domain,
110 const ossia::domain& sink_domain) noexcept;
111OSSIA_EXPORT
112void process_control_value(
113 ossia::value& v, const ossia::complex_type& source_type,
114 const ossia::complex_type& sink_type) noexcept;
115OSSIA_EXPORT
116void process_control_value(
117 ossia::value& v, const ossia::domain& source_domain,
118 const ossia::domain& sink_domain, const ossia::complex_type& source_type,
119 const ossia::complex_type& sink_type) noexcept;
120}
Definition git_info.h:7
ossia::small_vector< int32_t, 2 > destination_index
Definition destination_index.hpp:40