: gr_sync_block ("@BASE_NAME@",
gr_make_io_signature (1, 1, sizeof (@I_TYPE@)),
gr_make_io_signature (1, 1, sizeof (@O_TYPE@))),
- d_length(length),
- d_scale(scale),
- d_max_iter(max_iter)
+ d_length(length),
+ d_scale(scale),
+ d_max_iter(max_iter),
+ d_new_length(length),
+ d_new_scale(scale),
+ d_updated(false)
{
set_history(length);
}
{
}
+void
+@NAME@::set_length_and_scale(int length, @O_TYPE@ scale)
+{
+ d_new_length = length;
+ d_new_scale = scale;
+ d_updated = true;
+}
+
int
@NAME@::work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
+ if (d_updated) {
+ d_length = d_new_length;
+ d_scale = d_new_scale;
+ set_history(d_length);
+ d_updated = false;
+ return 0; // history requirements might have changed
+ }
+
const @I_TYPE@ *in = (const @I_TYPE@ *) input_items[0];
@O_TYPE@ *out = (@O_TYPE@ *) output_items[0];
@O_TYPE@ d_scale;
int d_max_iter;
+ int d_new_length;
+ @O_TYPE@ d_new_scale;
+ bool d_updated;
+
public:
~@NAME@ ();
int work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
+
+ int length() const { return d_new_length; }
+ @O_TYPE@ scale() const { return d_new_scale; }
+
+ void set_length_and_scale(int length, @O_TYPE@ scale);
};
#endif /* @GUARD_NAME@ */