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 return address_unit;
72 }
73
75 [[nodiscard]] bool has_effective_type() const noexcept
76 {
77 return bool(address_unit) || bool(type);
78 }
79
81 [[nodiscard]] const ossia::unit_t* effective_unit() const noexcept
82 {
83 if(auto u = type.target<ossia::unit_t>(); u && bool(*u))
84 return u;
85 if(address_unit)
86 return &address_unit;
87 return type.target<ossia::unit_t>();
88 }
89
91 // std::optional<ossia::time_value> tween_date;
92
93 bool is_event{};
94 data_mix_method mix_method{};
95
96private:
97 value_vector<ossia::timed_value> data;
98};
99
100struct value_delay_line
101{
102 std::vector<value_vector<ossia::typed_value>> data;
103};
104
105OSSIA_EXPORT
106void process_control_value(
107 ossia::value& v, const ossia::domain& source_domain,
108 const ossia::domain& sink_domain) noexcept;
109OSSIA_EXPORT
110void process_control_value(
111 ossia::value& v, const ossia::complex_type& source_type,
112 const ossia::complex_type& sink_type) noexcept;
113OSSIA_EXPORT
114void process_control_value(
115 ossia::value& v, const ossia::domain& source_domain,
116 const ossia::domain& sink_domain, const ossia::complex_type& source_type,
117 const ossia::complex_type& sink_type) noexcept;
118}
The parameter_base class.
Definition ossia/network/base/parameter.hpp:48
The value class.
Definition value.hpp:173
Definition git_info.h:7
ossia::small_vector< int32_t, 2 > destination_index
Definition destination_index.hpp:40
domain A domain of values
Definition domain_base.hpp:23
Definition dataspace.hpp:24