Loading...
Searching...
No Matches
Queue.hpp
1#pragma once
2#include <boost/circular_buffer.hpp>
3
4#include <halp/controls.hpp>
5#include <halp/meta.hpp>
6#include <ossia/network/value/value.hpp>
7
8
9namespace avnd_tools
10{
11
12struct Queue
13{
14 halp_meta(name, "Buffer queue")
15 halp_meta(author, "ossia team")
16 halp_meta(category, "Control/Data processing")
17 halp_meta(description, "Queue input messages and output them as a buffer")
18 halp_meta(c_name, "avnd_pattern_combine")
19 halp_meta(uuid, "8445e5bf-3815-42f0-9291-03b53f6e8a13")
20 halp_meta(manual_url, "https://ossia.io/score-docs/processes/buffer-queue.html")
21
22 enum OutputMode
23 {
24 Always,
25 WhenFull
26 };
27 enum OutputData
28 {
29 SingleValue,
30 WholeBuffer
31 };
32 struct
33 {
34 halp::val_port<"Input", ossia::value> input;
35 struct : halp::spinbox_i32<"Max length", halp::range{0, 100000, 100}>
36 {
37 void update(Queue& self)
38 {
39 if(this->value < 0)
40 return;
41 self.buffer.set_capacity(this->value);
42 }
43 } length;
44 halp::maintained_button<"Clear"> clear;
45 halp::maintained_button<"Lock"> lock;
46 halp::enum_t<OutputMode, "Mode"> mode;
47 halp::enum_t<OutputData, "Data"> data;
48 } inputs;
49
50 struct
51 {
52 halp::val_port<"Output", ossia::value> output;
53 } outputs;
54
55 boost::circular_buffer<ossia::value> buffer;
56
57 void operator()()
58 {
59 if(!inputs.input.value.valid())
60 return;
61
62 if(!inputs.lock && !inputs.clear)
63 buffer.push_back(std::move(inputs.input.value));
64
65 if(inputs.clear)
66 buffer.clear();
67
68 if(inputs.mode == OutputMode::WhenFull)
69 if(buffer.size() < buffer.capacity())
70 return;
71
72 if(buffer.empty())
73 {
74 if(inputs.data == OutputData::WholeBuffer)
75 {
76 outputs.output.value = std::vector<ossia::value>{};
77 return;
78 }
79 }
80
81 switch(inputs.data)
82 {
83 case OutputData::SingleValue:
84 outputs.output.value = buffer.front();
85 break;
86 case OutputData::WholeBuffer: {
87 outputs.output.value = std::vector<ossia::value>(buffer.begin(), buffer.end());
88 break;
89 }
90 }
91 }
92};
93
94}
Definition Queue.hpp:13