kfrlib / kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
https://www.kfrlib.com
GNU General Public License v2.0
1.65k stars 253 forks source link

expression as class member #108

Closed mipac closed 3 years ago

mipac commented 3 years ago

Is it possible to define a class member as a kfr::gen_sin for example? Or how can I use a generator in class methods?

samuelriddle commented 3 years ago

Hi, expression_pointer<T> has been created exactly for this purpose. Use to_pointer<T> function to convert an expression (or a generator which is expression too) to pointer. T means the type of generated values. Note that expression_pointer has shared-pointer semantics (like std::shared_ptr).

Example:

class MyClass
{
    template <typename ExprTpl>
    MyClass(ExprTpl&& expr_tpl): expr( to_pointer<float>( std::forward<ExprTpl>(expr_tpl) ) ) {}
    void process(float* data, size_t size)
    {
        make_univector(data, size) = expr * 0.5f;
    }
    expression_pointer<float> expr;
};
mipac commented 3 years ago

perfect! thank you very much