104 friend class ossia::scenario;
107 using container = ossia::small_vector<std::shared_ptr<time_event>, 2>;
108 using iterator = container::iterator;
109 using const_iterator = container::const_iterator;
119 [[nodiscard]]
time_value get_date()
const noexcept;
122 [[nodiscard]]
const expression& get_expression()
const noexcept;
131 time_sync& set_expression(expression_ptr)
noexcept;
141 expression_ptr = expressions::make_expression_true());
142 iterator insert(const_iterator, std::shared_ptr<time_event>);
143 void remove(
const std::shared_ptr<time_event>&);
154 [[nodiscard]]
bool is_observing_expression() const noexcept;
155 [[nodiscard]]
bool is_evaluating() const noexcept;
159 void start_trigger_request() noexcept;
160 void end_trigger_request() noexcept;
169 [[nodiscard]]
bool is_autotrigger() const noexcept;
170 void set_autotrigger(
bool) noexcept;
172 [[nodiscard]]
bool is_start() const noexcept;
173 void set_start(
bool) noexcept;
176 void observe_expression(
bool);
177 inline
void observe_expression(
bool b, auto&& cb)
181 return observe_expression_impl(b, std::move(cb));
192 [[nodiscard]]
bool muted() const noexcept {
return m_muted; }
200 enum class status : uint8_t
206 [[nodiscard]] status get_status() const noexcept {
return m_status; }
208 void set_sync_rate(
double syncRatio)
noexcept { m_sync_rate = syncRatio; }
209 [[nodiscard]]
double get_sync_rate() const noexcept {
return m_sync_rate; }
210 [[nodiscard]]
bool has_sync_rate() const noexcept {
return m_sync_rate > 0; }
212 void set_trigger_date(time_value v)
noexcept
215 callbacks.trigger_date_fixed(v);
217 [[nodiscard]] time_value get_trigger_date() const noexcept {
return m_trigger_date; }
218 [[nodiscard]]
bool has_trigger_date() const noexcept
220 return !m_trigger_date.infinite();
223 void set_is_being_triggered(
bool v)
noexcept;
224 [[nodiscard]]
bool is_being_triggered() const noexcept {
return m_is_being_triggered; }
227 ossia::expression_ptr m_expression;
228 container m_timeEvents;
230 std::optional<expressions::expression_callback_iterator> m_callback;
232 double m_sync_rate = 0.;
234 std::atomic_bool trigger_request{};
235 time_value m_trigger_date = Infinite;
239 bool m_evaluating : 1;
241 bool m_autotrigger : 1;
242 bool m_is_being_triggered : 1;