63 [[nodiscard]]
bool is_running()
const {
return m_running.load(); }
82 void enqueue_batch(
const std::vector<InputValue>& values);
96 const std::shared_ptr<Nodes::Input::InputNode>& node,
105 void unregister_node(
const std::shared_ptr<Nodes::Input::InputNode>& node);
110 void unregister_all_nodes();
115 [[nodiscard]]
size_t get_registered_node_count()
const;
126 return m_events_processed.load();
132 [[nodiscard]]
size_t get_queue_depth()
const;
139 void processing_loop();
140 void dispatch_to_nodes(
const InputValue& value);
142 std::optional<InputBinding> resolve_vid_pid(
const InputBinding& binding,
const std::vector<InputDeviceInfo>& devices)
const;
145 std::atomic<bool> m_running {
false };
146 std::atomic<bool> m_stop_requested {
false };
152 std::atomic<bool> m_queue_notify {
false };
153 static constexpr size_t MAX_QUEUE_SIZE = 4096;
161 std::weak_ptr<Nodes::Input::InputNode>
node;
170#ifdef MAYAFLUX_PLATFORM_MACOS
172 std::atomic<const RegistrationList*> m_registrations {
nullptr };
175 static constexpr size_t MAX_READERS = 16;
176 mutable std::array<std::atomic<const RegistrationList*>, MAX_READERS> m_hazard_ptrs;
177 mutable std::atomic<size_t> m_hazard_counter { 0 };
179 void retire_list(
const RegistrationList* list);
191 std::atomic<uint64_t> m_events_processed { 0 };
Policy-driven unified circular buffer implementation.
void register_node(const std::shared_ptr< Nodes::Node > &node, const Nodes::ProcessingToken &token, uint32_t channel)
void unregister_node(const std::shared_ptr< Nodes::Node > &node, const Nodes::ProcessingToken &token, uint32_t channel)
Removes a node from the root node of specified channels.