MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
Node.cpp
Go to the documentation of this file.
1#include "Node.hpp"
2
3namespace MayaFlux::Nodes {
4
5void Node::on_tick(const NodeHook& callback)
6{
8}
9
10void Node::on_tick_if(const NodeHook& callback, const NodeCondition& condition)
11{
13}
14
15bool Node::remove_hook(const NodeHook& callback)
16{
17 return safe_remove_callback(m_callbacks, callback);
18}
19
24
26{
27 m_callbacks.clear();
29}
30
31void Node::register_channel_usage(uint32_t channel_id)
32{
33 if (channel_id >= 32)
34 return;
35
36 auto channel_bit = static_cast<uint32_t>((0x0ffffffff) & (1ULL << (uint64_t)channel_id));
37
38 m_active_channels_mask.fetch_or(channel_bit, std::memory_order_acq_rel);
39}
40
41void Node::unregister_channel_usage(uint32_t channel_id)
42{
43 if (channel_id >= 32)
44 return;
45 auto channel_bit = static_cast<uint32_t>((0x0ffffffff) & (1ULL << (uint64_t)channel_id));
46
47 m_active_channels_mask.fetch_and(~channel_bit, std::memory_order_acq_rel);
48 m_pending_reset_mask.fetch_and(~channel_bit, std::memory_order_acq_rel);
49}
50
51bool Node::is_used_by_channel(uint32_t channel_id) const
52{
53 if (channel_id >= 32)
54 return false;
55
56 auto channel_bit = static_cast<uint32_t>((0x0ffffffff) & (1ULL << (uint64_t)channel_id));
57 uint32_t active_mask = m_active_channels_mask.load(std::memory_order_acquire);
58 return (active_mask & channel_bit) != 0;
59}
60
61void Node::request_reset_from_channel(uint32_t channel_id)
62{
63 if (channel_id >= 32)
64 return;
65 auto channel_bit = static_cast<uint32_t>((0x0ffffffff) & (1ULL << (uint64_t)channel_id));
66 uint32_t old_pending = m_pending_reset_mask.fetch_or(channel_bit, std::memory_order_acq_rel);
67 uint32_t new_pending = old_pending | channel_bit;
68 uint32_t active_channels = m_active_channels_mask.load(std::memory_order_acquire);
69
70 if ((new_pending & active_channels) == active_channels && active_channels != 0) {
71 uint32_t expected = new_pending;
72 if (m_pending_reset_mask.compare_exchange_strong(expected, 0, std::memory_order_acq_rel)) {
74 }
75 }
76}
77
78[[nodiscard]] std::span<const float> Node::get_gpu_data_buffer() const
79{
80 return { m_gpu_data_buffer.data(), m_gpu_data_buffer.size() };
81}
82
84{
85 uint32_t active_mask = m_active_channels_mask.load(std::memory_order_acquire);
86 if (active_mask == 0) {
88 }
89}
90
95
96}
std::atomic< uint32_t > m_active_channels_mask
Bitmask tracking which channels are currently using this node.
Definition Node.hpp:483
virtual void on_tick_if(const NodeHook &callback, const NodeCondition &condition)
Registers a conditional callback.
Definition Node.cpp:10
std::atomic< uint32_t > m_pending_reset_mask
Bitmask tracking which channels have requested a reset.
Definition Node.hpp:492
std::vector< NodeHook > m_callbacks
Collection of standard callback functions.
Definition Node.hpp:416
virtual void reset_processed_state()
Resets the processed state of the node and any attached input nodes.
Definition Node.cpp:83
bool is_used_by_channel(uint32_t channel_id) const
Checks if the node is currently used by a specific channel.
Definition Node.cpp:51
void unregister_channel_usage(uint32_t channel_id)
Removes the specified channel from the usage tracking.
Definition Node.cpp:41
virtual void reset_processed_state_internal()
Resets the processed state of the node directly.
Definition Node.cpp:91
std::vector< std::pair< NodeHook, NodeCondition > > m_conditional_callbacks
Collection of conditional callback functions with their predicates.
Definition Node.hpp:426
virtual void remove_all_hooks()
Removes all registered callbacks.
Definition Node.cpp:25
std::atomic< Utils::NodeState > m_state
Atomic state flag tracking the node's processing status.
Definition Node.hpp:463
virtual bool remove_hook(const NodeHook &callback)
Removes a previously registered callback.
Definition Node.cpp:15
void register_channel_usage(uint32_t channel_id)
Mark the specificed channel as a processor/user.
Definition Node.cpp:31
void request_reset_from_channel(uint32_t channel_id)
Requests a reset of the processed state from a specific channel.
Definition Node.cpp:61
virtual bool remove_conditional_hook(const NodeCondition &callback)
Removes a previously registered conditional callback.
Definition Node.cpp:20
std::vector< float > m_gpu_data_buffer
GPU data buffer for context objects.
Definition Node.hpp:406
std::span< const float > get_gpu_data_buffer() const
Provides access to the GPU data buffer.
Definition Node.cpp:78
virtual void on_tick(const NodeHook &callback)
Registers a callback to be called on each tick.
Definition Node.cpp:5
std::function< void(NodeContext &)> NodeHook
Callback function type for node processing events.
Definition NodeUtils.hpp:25
bool safe_remove_conditional_callback(std::vector< std::pair< NodeHook, NodeCondition > > &callbacks, const NodeCondition &callback)
Safely removes all conditional callbacks with a specific condition.
Definition NodeUtils.cpp:68
bool safe_add_callback(std::vector< NodeHook > &callbacks, const NodeHook &callback)
Safely adds a callback to a collection if it doesn't already exist.
Definition NodeUtils.cpp:33
std::function< bool(NodeContext &)> NodeCondition
Predicate function type for conditional callbacks.
Definition NodeUtils.hpp:43
bool safe_add_conditional_callback(std::vector< std::pair< NodeHook, NodeCondition > > &callbacks, const NodeHook &callback, const NodeCondition &condition)
Safely adds a conditional callback if it doesn't already exist.
Definition NodeUtils.cpp:42
void atomic_remove_flag(std::atomic< Utils::NodeState > &state, Utils::NodeState flag)
Atomically removes a flag from a node state.
bool safe_remove_callback(std::vector< NodeHook > &callbacks, const NodeHook &callback)
Safely removes a callback from a collection.
Definition NodeUtils.cpp:51
Contains the node-based computational processing system components.
Definition Chronie.hpp:5
@ PROCESSED
Node has been processed this cycle.
Definition Utils.hpp:34