32 using Transform = std::function<double(std::span<double>, std::span<const double>, std::span<double>)>;
41 void processing_function(
const std::shared_ptr<Buffer>&
buffer)
override;
42 void on_attach(
const std::shared_ptr<Buffer>&
buffer)
override;
43 void on_detach(
const std::shared_ptr<Buffer>&
buffer)
override;
44 [[nodiscard]]
bool is_compatible_with(
const std::shared_ptr<Buffer>&
buffer)
const override;
59 void set_observer(std::function<
void(
double)> observer) { m_observer = std::move(observer); }
64 [[nodiscard]]
double feature(
const std::shared_ptr<Buffer>&
buffer)
const;
69 [[nodiscard]] std::span<double> coefficients(
const std::shared_ptr<Buffer>&
buffer);
76 [[nodiscard]] std::shared_ptr<BlockFeedbackProcessor> clone()
const;
80 std::vector<std::vector<double>>
blocks;
84 double feature { 0.0 };
88 size_t m_lag_blocks { 1 };
89 bool m_retain_input {
false };
93 std::unordered_map<const Buffer*, State>
m_states;
std::shared_ptr< NetworkGeometryBuffer > buffer
std::unordered_map< const Buffer *, State > m_states
std::function< double(std::span< double >, std::span< const double >, std::span< double >)> Transform
The per-block function.
std::vector< double > m_coefficients
std::function< void(double)> m_observer
void set_observer(std::function< void(double)> observer)
Called with the feature after every block.
bool get_retain_input() const
size_t get_lag_blocks() const
void set_retain_input(bool retain_input)
Keep the incoming block instead of the transformed one.
Compares and transforms each whole block against an earlier block.
Central computational transformation interface for continuous buffer processing.
std::vector< double > kept
std::vector< double > coefs
std::vector< std::vector< double > > blocks