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")
34 halp::val_port<
"Input", ossia::value> input;
35 struct : halp::spinbox_i32<
"Max length", halp::range{0, 100000, 100}>
37 void update(
Queue& self)
41 self.buffer.set_capacity(this->value);
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;
52 halp::val_port<
"Output", ossia::value> output;
55 boost::circular_buffer<ossia::value> buffer;
59 if(!inputs.input.value.valid())
62 if(!inputs.lock && !inputs.clear)
63 buffer.push_back(std::move(inputs.input.value));
68 if(inputs.mode == OutputMode::WhenFull)
69 if(buffer.size() < buffer.capacity())
74 if(inputs.data == OutputData::WholeBuffer)
76 outputs.output.value = std::vector<ossia::value>{};
83 case OutputData::SingleValue:
84 outputs.output.value = buffer.front();
86 case OutputData::WholeBuffer: {
87 outputs.output.value = std::vector<ossia::value>(buffer.begin(), buffer.end());