11#pragma once
22
3- #include " dsplib/array.h"
4- #include " dsplib/types.h"
53#include < dsplib/fft.h>
64#include < dsplib/assert.h>
75
@@ -22,30 +20,35 @@ class SmallFftC : public FftPlanC
2220 ~SmallFftC () override {
2321 }
2422
25- [[nodiscard]] arr_cmplx solve (span_t <cmplx_t > x) const final {
23+ void solve (span_t <cmplx_t > x, mut_span_t < cmplx_t > r ) const final {
2624 DSPLIB_ASSERT (x.size () == n_, " input size error" );
27- arr_cmplx y (x.size ());
25+ DSPLIB_ASSERT (x.size () == r. size (), " input size error " );
2826 switch (n_) {
2927 case 1 :
30- y [0 ] = x[0 ];
28+ r [0 ] = x[0 ];
3129 break ;
3230 case 2 :
33- _fft_n2 (x.data (), y .data ());
31+ _fft_n2 (x.data (), r .data ());
3432 break ;
3533 case 3 :
36- _fft_n3 (x.data (), y .data ());
34+ _fft_n3 (x.data (), r .data ());
3735 break ;
3836 case 4 :
39- _fft_n4 (x.data (), y .data ());
37+ _fft_n4 (x.data (), r .data ());
4038 break ;
4139 case 8 :
42- _fft_n8 (x.data (), y .data ());
40+ _fft_n8 (x.data (), r .data ());
4341 break ;
4442 default :
4543 DSPLIB_THROW (" size not supported" );
4644 break ;
4745 }
48- return y;
46+ }
47+
48+ [[nodiscard]] arr_cmplx solve (span_t <cmplx_t > x) const final {
49+ arr_cmplx r (x.size ());
50+ this ->solve (x, r);
51+ return r;
4952 }
5053
5154 [[nodiscard]] int size () const noexcept final {
@@ -137,30 +140,36 @@ class SmallFftR : public FftPlanR
137140 ~SmallFftR () override {
138141 }
139142
140- [[nodiscard]] arr_cmplx solve (span_t <real_t > x) const final {
143+ void solve (span_t <real_t > x, mut_span_t < cmplx_t > r ) const final {
141144 DSPLIB_ASSERT (x.size () == n_, " input size error" );
142- arr_cmplx y (x.size ());
145+ DSPLIB_ASSERT (x.size () == r. size (), " input size error " );
143146 switch (n_) {
144147 case 1 :
145- y[0 ] = x[0 ];
148+ r[0 ].re = x[0 ];
149+ r[0 ].im = 0 ;
146150 break ;
147151 case 2 :
148- _fft_n2 (x.data (), y .data ());
152+ _fft_n2 (x.data (), r .data ());
149153 break ;
150154 case 3 :
151- _fft_n3 (x.data (), y .data ());
155+ _fft_n3 (x.data (), r .data ());
152156 break ;
153157 case 4 :
154- _fft_n4 (x.data (), y .data ());
158+ _fft_n4 (x.data (), r .data ());
155159 break ;
156160 case 8 :
157- _fft_n8 (x.data (), y .data ());
161+ _fft_n8 (x.data (), r .data ());
158162 break ;
159163 default :
160164 DSPLIB_THROW (" size not supported" );
161165 break ;
162166 }
163- return y;
167+ }
168+
169+ [[nodiscard]] arr_cmplx solve (span_t <real_t > x) const final {
170+ arr_cmplx r (x.size ());
171+ this ->solve (x, r);
172+ return r;
164173 }
165174
166175 [[nodiscard]] int size () const noexcept final {
0 commit comments