@@ -200,32 +200,60 @@ static int _finddelay(const base_array<T>& x1, const base_array<T>& x2) {
200200 return -delay;
201201}
202202
203- int finddelay (const dsplib:: arr_real& x1, const dsplib:: arr_real& x2) {
203+ int finddelay (const arr_real& x1, const arr_real& x2) {
204204 return _finddelay (x1, x2);
205205}
206206
207- int finddelay (const dsplib:: arr_cmplx& x1, const dsplib:: arr_cmplx& x2) {
207+ int finddelay (const arr_cmplx& x1, const arr_cmplx& x2) {
208208 return _finddelay (x1, x2);
209209}
210210
211- arr_real zeropad (span_t <real_t > x, int n) {
211+ template <typename T>
212+ static base_array<T> _zeropad (span_t <T> x, int n) {
212213 DSPLIB_ASSERT (x.size () <= n, " padding size error" );
213214 if (x.size () == n) {
214215 return x;
215216 }
216- arr_real r (n);
217+ base_array<T> r (n);
217218 r.slice (0 , x.size ()) = x;
218219 return r;
219220}
220221
222+ arr_real zeropad (span_t <real_t > x, int n) {
223+ return _zeropad<real_t >(x, n);
224+ }
225+
221226arr_cmplx zeropad (span_t <cmplx_t > x, int n) {
222- DSPLIB_ASSERT (x.size () <= n, " padding size error" );
223- if (x.size () == n) {
224- return x;
227+ return _zeropad<cmplx_t >(x, n);
228+ }
229+
230+ template <class T >
231+ static base_array<T> _concatenate (span_t <T> a1, span_t <T> a2, span_t <T> a3, span_t <T> a4, span_t <T> a5) {
232+ std::array<span_t <T>, 5 > span_list{a1, a2, a3, a4, a5};
233+
234+ size_t nr = 0 ;
235+ for (const auto & x : span_list) {
236+ nr += x.size ();
237+ }
238+
239+ base_array<T> r (nr);
240+ auto * pr = r.data ();
241+ for (const auto & x : span_list) {
242+ if (x.empty ()) {
243+ continue ;
244+ }
245+ std::memcpy (pr, x.data (), x.size () * sizeof (T));
246+ pr += x.size ();
225247 }
226- arr_cmplx r (n);
227- r.slice (0 , x.size ()) = x;
228248 return r;
229249}
230250
251+ arr_real concatenate (span_real x1, span_real x2, span_real x3, span_real x4, span_real x5) {
252+ return _concatenate<real_t >(x1, x2, x3, x4, x5);
253+ }
254+
255+ arr_cmplx concatenate (span_cmplx x1, span_cmplx x2, span_cmplx x3, span_cmplx x4, span_cmplx x5) {
256+ return _concatenate<cmplx_t >(x1, x2, x3, x4, x5);
257+ }
258+
231259} // namespace dsplib
0 commit comments