1use super::*;
2
3impl_binary_operation!(add_i16, i16, nppsAdd_16s_Ctx);
4impl_binary_operation!(add_u16, u16, nppsAdd_16u_Ctx);
5impl_binary_operation!(add_u32, u32, nppsAdd_32u_Ctx);
6impl_binary_operation!(add_f32, f32, nppsAdd_32f_Ctx);
7impl_binary_operation!(add_f64, f64, nppsAdd_64f_Ctx);
8impl_binary_operation!(add_f32_complex, Complex32, nppsAdd_32fc_Ctx);
9impl_binary_operation!(add_f64_complex, Complex64, nppsAdd_64fc_Ctx);
10impl_reversed_binary_operation!(subtract_i16, i16, nppsSub_16s_Ctx);
11impl_reversed_binary_operation!(subtract_f32, f32, nppsSub_32f_Ctx);
12impl_reversed_binary_operation!(subtract_f64, f64, nppsSub_64f_Ctx);
13impl_reversed_binary_operation!(subtract_f32_complex, Complex32, nppsSub_32fc_Ctx);
14impl_reversed_binary_operation!(subtract_f64_complex, Complex64, nppsSub_64fc_Ctx);
15impl_binary_operation!(multiply_i16, i16, nppsMul_16s_Ctx);
16impl_binary_operation!(multiply_f32, f32, nppsMul_32f_Ctx);
17impl_binary_operation!(multiply_f64, f64, nppsMul_64f_Ctx);
18impl_binary_operation!(multiply_f32_complex, Complex32, nppsMul_32fc_Ctx);
19impl_binary_operation!(multiply_f64_complex, Complex64, nppsMul_64fc_Ctx);
20impl_reversed_binary_operation!(divide_f32, f32, nppsDiv_32f_Ctx);
21impl_reversed_binary_operation!(divide_f64, f64, nppsDiv_64f_Ctx);
22impl_reversed_binary_operation!(divide_f32_complex, Complex32, nppsDiv_32fc_Ctx);
23impl_reversed_binary_operation!(divide_f64_complex, Complex64, nppsDiv_64fc_Ctx);
24impl_binary_operation!(and_u8, u8, nppsAnd_8u_Ctx);
25impl_binary_operation!(and_u16, u16, nppsAnd_16u_Ctx);
26impl_binary_operation!(and_u32, u32, nppsAnd_32u_Ctx);
27impl_binary_operation!(or_u8, u8, nppsOr_8u_Ctx);
28impl_binary_operation!(or_u16, u16, nppsOr_16u_Ctx);
29impl_binary_operation!(or_u32, u32, nppsOr_32u_Ctx);
30impl_binary_operation!(xor_u8, u8, nppsXor_8u_Ctx);
31impl_binary_operation!(xor_u16, u16, nppsXor_16u_Ctx);
32impl_binary_operation!(xor_u32, u32, nppsXor_32u_Ctx);
33
34impl_mixed_binary_operation!(add_u8_to_u16, u8, u16, nppsAdd_8u16u_Ctx);
35impl_mixed_binary_operation!(add_i16_to_f32, i16, f32, nppsAdd_16s32f_Ctx);
36impl_reversed_mixed_binary_operation!(subtract_i16_to_f32, i16, f32, nppsSub_16s32f_Ctx);
37impl_mixed_binary_operation!(multiply_u8_to_u16, u8, u16, nppsMul_8u16u_Ctx);
38impl_mixed_binary_operation!(multiply_i16_to_f32, i16, f32, nppsMul_16s32f_Ctx);
39impl_heterogeneous_binary_operation!(
40 multiply_f32_with_f32_complex,
41 f32,
42 Complex32,
43 Complex32,
44 nppsMul_32f32fc_Ctx
45);
46
47impl_scaled_binary_operation!(add_u8_scaled, u8, nppsAdd_8u_Sfs_Ctx);
48impl_scaled_binary_operation!(add_u16_scaled, u16, nppsAdd_16u_Sfs_Ctx);
49impl_scaled_binary_operation!(add_i16_scaled, i16, nppsAdd_16s_Sfs_Ctx);
50impl_scaled_binary_operation!(add_i32_scaled, i32, nppsAdd_32s_Sfs_Ctx);
51impl_scaled_binary_operation!(add_i64_scaled, i64, nppsAdd_64s_Sfs_Ctx);
52impl_scaled_binary_operation!(add_i16_complex_scaled, ComplexI16, nppsAdd_16sc_Sfs_Ctx);
53impl_scaled_binary_operation!(add_i32_complex_scaled, ComplexI32, nppsAdd_32sc_Sfs_Ctx);
54impl_reversed_scaled_binary_operation!(subtract_u8_scaled, u8, nppsSub_8u_Sfs_Ctx);
55impl_reversed_scaled_binary_operation!(subtract_u16_scaled, u16, nppsSub_16u_Sfs_Ctx);
56impl_reversed_scaled_binary_operation!(subtract_i16_scaled, i16, nppsSub_16s_Sfs_Ctx);
57impl_reversed_scaled_binary_operation!(subtract_i32_scaled, i32, nppsSub_32s_Sfs_Ctx);
58impl_reversed_scaled_binary_operation!(
59 subtract_i16_complex_scaled,
60 ComplexI16,
61 nppsSub_16sc_Sfs_Ctx
62);
63impl_reversed_scaled_binary_operation!(
64 subtract_i32_complex_scaled,
65 ComplexI32,
66 nppsSub_32sc_Sfs_Ctx
67);
68impl_scaled_binary_operation!(multiply_u8_scaled, u8, nppsMul_8u_Sfs_Ctx);
69impl_scaled_binary_operation!(multiply_u16_scaled, u16, nppsMul_16u_Sfs_Ctx);
70impl_scaled_binary_operation!(multiply_i16_scaled, i16, nppsMul_16s_Sfs_Ctx);
71impl_scaled_binary_operation!(multiply_i32_scaled, i32, nppsMul_32s_Sfs_Ctx);
72impl_scaled_binary_operation!(
73 multiply_i16_complex_scaled,
74 ComplexI16,
75 nppsMul_16sc_Sfs_Ctx
76);
77impl_scaled_binary_operation!(
78 multiply_i32_complex_scaled,
79 ComplexI32,
80 nppsMul_32sc_Sfs_Ctx
81);
82impl_scaled_heterogeneous_binary_operation!(
83 multiply_u16_with_i16_scaled,
84 u16,
85 i16,
86 i16,
87 nppsMul_16u16s_Sfs_Ctx
88);
89impl_scaled_mixed_binary_operation!(multiply_i16_to_i32_scaled, i16, i32, nppsMul_16s32s_Sfs_Ctx);
90impl_scaled_heterogeneous_binary_operation!(
91 multiply_i32_with_i32_complex_scaled,
92 i32,
93 ComplexI32,
94 ComplexI32,
95 nppsMul_32s32sc_Sfs_Ctx
96);
97impl_scaled_binary_operation!(multiply_low_i32_scaled, i32, nppsMul_Low_32s_Sfs_Ctx);
98impl_reversed_scaled_binary_operation!(divide_u8_scaled, u8, nppsDiv_8u_Sfs_Ctx);
99impl_reversed_scaled_binary_operation!(divide_u16_scaled, u16, nppsDiv_16u_Sfs_Ctx);
100impl_reversed_scaled_binary_operation!(divide_i16_scaled, i16, nppsDiv_16s_Sfs_Ctx);
101impl_reversed_scaled_binary_operation!(divide_i32_scaled, i32, nppsDiv_32s_Sfs_Ctx);
102impl_reversed_scaled_binary_operation!(divide_i16_complex_scaled, ComplexI16, nppsDiv_16sc_Sfs_Ctx);
103impl_reversed_scaled_heterogeneous_binary_operation!(
104 divide_i32_by_i16_scaled,
105 i32,
106 i16,
107 i16,
108 nppsDiv_32s16s_Sfs_Ctx
109);
110impl_reversed_scaled_round_binary_operation!(divide_u8_scaled_round, u8, nppsDiv_Round_8u_Sfs_Ctx);
111impl_reversed_scaled_round_binary_operation!(
112 divide_u16_scaled_round,
113 u16,
114 nppsDiv_Round_16u_Sfs_Ctx
115);
116impl_reversed_scaled_round_binary_operation!(
117 divide_i16_scaled_round,
118 i16,
119 nppsDiv_Round_16s_Sfs_Ctx
120);
121
122impl_binary_operation_in_place!(add_i16_in_place, i16, nppsAdd_16s_I_Ctx);
123impl_binary_operation_in_place!(add_f32_in_place, f32, nppsAdd_32f_I_Ctx);
124impl_binary_operation_in_place!(add_f64_in_place, f64, nppsAdd_64f_I_Ctx);
125impl_binary_operation_in_place!(add_f32_complex_in_place, Complex32, nppsAdd_32fc_I_Ctx);
126impl_binary_operation_in_place!(add_f64_complex_in_place, Complex64, nppsAdd_64fc_I_Ctx);
127impl_binary_operation_in_place!(subtract_i16_in_place, i16, nppsSub_16s_I_Ctx);
128impl_binary_operation_in_place!(subtract_f32_in_place, f32, nppsSub_32f_I_Ctx);
129impl_binary_operation_in_place!(subtract_f64_in_place, f64, nppsSub_64f_I_Ctx);
130impl_binary_operation_in_place!(subtract_f32_complex_in_place, Complex32, nppsSub_32fc_I_Ctx);
131impl_binary_operation_in_place!(subtract_f64_complex_in_place, Complex64, nppsSub_64fc_I_Ctx);
132impl_binary_operation_in_place!(multiply_i16_in_place, i16, nppsMul_16s_I_Ctx);
133impl_binary_operation_in_place!(multiply_f32_in_place, f32, nppsMul_32f_I_Ctx);
134impl_binary_operation_in_place!(multiply_f64_in_place, f64, nppsMul_64f_I_Ctx);
135impl_binary_operation_in_place!(multiply_f32_complex_in_place, Complex32, nppsMul_32fc_I_Ctx);
136impl_binary_operation_in_place!(multiply_f64_complex_in_place, Complex64, nppsMul_64fc_I_Ctx);
137impl_binary_operation_in_place!(divide_f32_in_place, f32, nppsDiv_32f_I_Ctx);
138impl_binary_operation_in_place!(divide_f64_in_place, f64, nppsDiv_64f_I_Ctx);
139impl_binary_operation_in_place!(divide_f32_complex_in_place, Complex32, nppsDiv_32fc_I_Ctx);
140impl_binary_operation_in_place!(divide_f64_complex_in_place, Complex64, nppsDiv_64fc_I_Ctx);
141impl_binary_operation_in_place!(and_u8_in_place, u8, nppsAnd_8u_I_Ctx);
142impl_binary_operation_in_place!(and_u16_in_place, u16, nppsAnd_16u_I_Ctx);
143impl_binary_operation_in_place!(and_u32_in_place, u32, nppsAnd_32u_I_Ctx);
144impl_binary_operation_in_place!(or_u8_in_place, u8, nppsOr_8u_I_Ctx);
145impl_binary_operation_in_place!(or_u16_in_place, u16, nppsOr_16u_I_Ctx);
146impl_binary_operation_in_place!(or_u32_in_place, u32, nppsOr_32u_I_Ctx);
147impl_binary_operation_in_place!(xor_u8_in_place, u8, nppsXor_8u_I_Ctx);
148impl_binary_operation_in_place!(xor_u16_in_place, u16, nppsXor_16u_I_Ctx);
149impl_binary_operation_in_place!(xor_u32_in_place, u32, nppsXor_32u_I_Ctx);
150impl_mixed_binary_operation_in_place!(add_i16_to_i32_in_place, i16, i32, nppsAdd_16s32s_I_Ctx);
151impl_heterogeneous_binary_operation_in_place!(
152 multiply_f32_complex_by_f32_in_place,
153 f32,
154 Complex32,
155 nppsMul_32f32fc_I_Ctx
156);
157
158impl_scaled_binary_operation_in_place!(add_u8_scaled_in_place, u8, nppsAdd_8u_ISfs_Ctx);
159impl_scaled_binary_operation_in_place!(add_u16_scaled_in_place, u16, nppsAdd_16u_ISfs_Ctx);
160impl_scaled_binary_operation_in_place!(add_i16_scaled_in_place, i16, nppsAdd_16s_ISfs_Ctx);
161impl_scaled_binary_operation_in_place!(add_i32_scaled_in_place, i32, nppsAdd_32s_ISfs_Ctx);
162impl_scaled_binary_operation_in_place!(
163 add_i16_complex_scaled_in_place,
164 ComplexI16,
165 nppsAdd_16sc_ISfs_Ctx
166);
167impl_scaled_binary_operation_in_place!(
168 add_i32_complex_scaled_in_place,
169 ComplexI32,
170 nppsAdd_32sc_ISfs_Ctx
171);
172impl_scaled_binary_operation_in_place!(subtract_u8_scaled_in_place, u8, nppsSub_8u_ISfs_Ctx);
173impl_scaled_binary_operation_in_place!(subtract_u16_scaled_in_place, u16, nppsSub_16u_ISfs_Ctx);
174impl_scaled_binary_operation_in_place!(subtract_i16_scaled_in_place, i16, nppsSub_16s_ISfs_Ctx);
175impl_scaled_binary_operation_in_place!(subtract_i32_scaled_in_place, i32, nppsSub_32s_ISfs_Ctx);
176impl_scaled_binary_operation_in_place!(
177 subtract_i16_complex_scaled_in_place,
178 ComplexI16,
179 nppsSub_16sc_ISfs_Ctx
180);
181impl_scaled_binary_operation_in_place!(
182 subtract_i32_complex_scaled_in_place,
183 ComplexI32,
184 nppsSub_32sc_ISfs_Ctx
185);
186impl_scaled_binary_operation_in_place!(multiply_u8_scaled_in_place, u8, nppsMul_8u_ISfs_Ctx);
187impl_scaled_binary_operation_in_place!(multiply_u16_scaled_in_place, u16, nppsMul_16u_ISfs_Ctx);
188impl_scaled_binary_operation_in_place!(multiply_i16_scaled_in_place, i16, nppsMul_16s_ISfs_Ctx);
189impl_scaled_binary_operation_in_place!(multiply_i32_scaled_in_place, i32, nppsMul_32s_ISfs_Ctx);
190impl_scaled_binary_operation_in_place!(
191 multiply_i16_complex_scaled_in_place,
192 ComplexI16,
193 nppsMul_16sc_ISfs_Ctx
194);
195impl_scaled_binary_operation_in_place!(
196 multiply_i32_complex_scaled_in_place,
197 ComplexI32,
198 nppsMul_32sc_ISfs_Ctx
199);
200impl_scaled_heterogeneous_binary_operation_in_place!(
201 multiply_i32_complex_by_i32_scaled_in_place,
202 i32,
203 ComplexI32,
204 nppsMul_32s32sc_ISfs_Ctx
205);
206impl_scaled_binary_operation_in_place!(divide_u8_scaled_in_place, u8, nppsDiv_8u_ISfs_Ctx);
207impl_scaled_binary_operation_in_place!(divide_u16_scaled_in_place, u16, nppsDiv_16u_ISfs_Ctx);
208impl_scaled_binary_operation_in_place!(divide_i16_scaled_in_place, i16, nppsDiv_16s_ISfs_Ctx);
209impl_scaled_binary_operation_in_place!(divide_i32_scaled_in_place, i32, nppsDiv_32s_ISfs_Ctx);
210impl_scaled_binary_operation_in_place!(
211 divide_i16_complex_scaled_in_place,
212 ComplexI16,
213 nppsDiv_16sc_ISfs_Ctx
214);
215impl_scaled_round_binary_operation_in_place!(
216 divide_u8_scaled_round_in_place,
217 u8,
218 nppsDiv_Round_8u_ISfs_Ctx
219);
220impl_scaled_round_binary_operation_in_place!(
221 divide_u16_scaled_round_in_place,
222 u16,
223 nppsDiv_Round_16u_ISfs_Ctx
224);
225impl_scaled_round_binary_operation_in_place!(
226 divide_i16_scaled_round_in_place,
227 i16,
228 nppsDiv_Round_16s_ISfs_Ctx
229);
230
231impl_destination_update_operation!(add_product_f32, f32, nppsAddProduct_32f_Ctx);
232impl_destination_update_operation!(add_product_f64, f64, nppsAddProduct_64f_Ctx);
233impl_destination_update_operation!(add_product_f32_complex, Complex32, nppsAddProduct_32fc_Ctx);
234impl_destination_update_operation!(add_product_f64_complex, Complex64, nppsAddProduct_64fc_Ctx);
235impl_scaled_destination_update_operation!(
236 add_product_i16_scaled,
237 i16,
238 i16,
239 nppsAddProduct_16s_Sfs_Ctx
240);
241impl_scaled_destination_update_operation!(
242 add_product_i32_scaled,
243 i32,
244 i32,
245 nppsAddProduct_32s_Sfs_Ctx
246);
247impl_scaled_destination_update_operation!(
248 add_product_i16_to_i32_scaled,
249 i16,
250 i32,
251 nppsAddProduct_16s32s_Sfs_Ctx
252);
253
254impl_unary_operation!(absolute_i16, i16, nppsAbs_16s_Ctx);
255impl_unary_operation!(absolute_i32, i32, nppsAbs_32s_Ctx);
256impl_unary_operation!(absolute_f32, f32, nppsAbs_32f_Ctx);
257impl_unary_operation!(absolute_f64, f64, nppsAbs_64f_Ctx);
258impl_unary_operation!(exponent_f32, f32, nppsExp_32f_Ctx);
259impl_unary_operation!(exponent_f64, f64, nppsExp_64f_Ctx);
260impl_mixed_unary_operation!(exponent_f32_to_f64, f32, f64, nppsExp_32f64f_Ctx);
261impl_scaled_unary_operation!(exponent_i16_scaled, i16, nppsExp_16s_Sfs_Ctx);
262impl_scaled_unary_operation!(exponent_i32_scaled, i32, nppsExp_32s_Sfs_Ctx);
263impl_scaled_unary_operation!(exponent_i64_scaled, i64, nppsExp_64s_Sfs_Ctx);
264impl_unary_operation!(natural_logarithm_f32, f32, nppsLn_32f_Ctx);
265impl_unary_operation!(natural_logarithm_f64, f64, nppsLn_64f_Ctx);
266impl_mixed_unary_operation!(natural_logarithm_f64_to_f32, f64, f32, nppsLn_64f32f_Ctx);
267impl_scaled_unary_operation!(natural_logarithm_i16_scaled, i16, nppsLn_16s_Sfs_Ctx);
268impl_scaled_unary_operation!(natural_logarithm_i32_scaled, i32, nppsLn_32s_Sfs_Ctx);
269impl_scaled_mixed_unary_operation!(
270 natural_logarithm_i32_to_i16_scaled,
271 i32,
272 i16,
273 nppsLn_32s16s_Sfs_Ctx
274);
275impl_scaled_unary_operation!(ten_times_log10_i32_scaled, i32, npps10Log10_32s_Sfs_Ctx);
276impl_unary_operation!(arctangent_f32, f32, nppsArctan_32f_Ctx);
277impl_unary_operation!(arctangent_f64, f64, nppsArctan_64f_Ctx);
278impl_unary_operation!(cube_root_f32, f32, nppsCubrt_32f_Ctx);
279impl_scaled_mixed_unary_operation!(
280 cube_root_i32_to_i16_scaled,
281 i32,
282 i16,
283 nppsCubrt_32s16s_Sfs_Ctx
284);
285impl_unary_operation!(not_u8, u8, nppsNot_8u_Ctx);
286impl_unary_operation!(not_u16, u16, nppsNot_16u_Ctx);
287impl_unary_operation!(not_u32, u32, nppsNot_32u_Ctx);
288impl_unary_operation!(square_f32, f32, nppsSqr_32f_Ctx);
289impl_unary_operation!(square_f64, f64, nppsSqr_64f_Ctx);
290impl_unary_operation!(square_f32_complex, Complex32, nppsSqr_32fc_Ctx);
291impl_unary_operation!(square_f64_complex, Complex64, nppsSqr_64fc_Ctx);
292impl_scaled_unary_operation!(square_u8_scaled, u8, nppsSqr_8u_Sfs_Ctx);
293impl_scaled_unary_operation!(square_u16_scaled, u16, nppsSqr_16u_Sfs_Ctx);
294impl_scaled_unary_operation!(square_i16_scaled, i16, nppsSqr_16s_Sfs_Ctx);
295impl_scaled_unary_operation!(square_i16_complex_scaled, ComplexI16, nppsSqr_16sc_Sfs_Ctx);
296impl_unary_operation!(square_root_f32, f32, nppsSqrt_32f_Ctx);
297impl_unary_operation!(square_root_f64, f64, nppsSqrt_64f_Ctx);
298impl_unary_operation!(square_root_f32_complex, Complex32, nppsSqrt_32fc_Ctx);
299impl_unary_operation!(square_root_f64_complex, Complex64, nppsSqrt_64fc_Ctx);
300impl_scaled_unary_operation!(square_root_u8_scaled, u8, nppsSqrt_8u_Sfs_Ctx);
301impl_scaled_unary_operation!(square_root_u16_scaled, u16, nppsSqrt_16u_Sfs_Ctx);
302impl_scaled_unary_operation!(square_root_i16_scaled, i16, nppsSqrt_16s_Sfs_Ctx);
303impl_scaled_unary_operation!(
304 square_root_i16_complex_scaled,
305 ComplexI16,
306 nppsSqrt_16sc_Sfs_Ctx
307);
308impl_scaled_unary_operation!(square_root_i64_scaled, i64, nppsSqrt_64s_Sfs_Ctx);
309impl_scaled_mixed_unary_operation!(
310 square_root_i32_to_i16_scaled,
311 i32,
312 i16,
313 nppsSqrt_32s16s_Sfs_Ctx
314);
315impl_scaled_mixed_unary_operation!(
316 square_root_i64_to_i16_scaled,
317 i64,
318 i16,
319 nppsSqrt_64s16s_Sfs_Ctx
320);
321
322impl_unary_operation_in_place!(absolute_i16_in_place, i16, nppsAbs_16s_I_Ctx);
323impl_unary_operation_in_place!(absolute_i32_in_place, i32, nppsAbs_32s_I_Ctx);
324impl_unary_operation_in_place!(absolute_f32_in_place, f32, nppsAbs_32f_I_Ctx);
325impl_unary_operation_in_place!(absolute_f64_in_place, f64, nppsAbs_64f_I_Ctx);
326impl_unary_operation_in_place!(exponent_f32_in_place, f32, nppsExp_32f_I_Ctx);
327impl_unary_operation_in_place!(exponent_f64_in_place, f64, nppsExp_64f_I_Ctx);
328impl_scaled_unary_operation_in_place!(exponent_i16_scaled_in_place, i16, nppsExp_16s_ISfs_Ctx);
329impl_scaled_unary_operation_in_place!(exponent_i32_scaled_in_place, i32, nppsExp_32s_ISfs_Ctx);
330impl_scaled_unary_operation_in_place!(exponent_i64_scaled_in_place, i64, nppsExp_64s_ISfs_Ctx);
331impl_unary_operation_in_place!(natural_logarithm_f32_in_place, f32, nppsLn_32f_I_Ctx);
332impl_unary_operation_in_place!(natural_logarithm_f64_in_place, f64, nppsLn_64f_I_Ctx);
333impl_scaled_unary_operation_in_place!(
334 natural_logarithm_i16_scaled_in_place,
335 i16,
336 nppsLn_16s_ISfs_Ctx
337);
338impl_scaled_unary_operation_in_place!(
339 natural_logarithm_i32_scaled_in_place,
340 i32,
341 nppsLn_32s_ISfs_Ctx
342);
343impl_scaled_unary_operation_in_place!(
344 ten_times_log10_i32_scaled_in_place,
345 i32,
346 npps10Log10_32s_ISfs_Ctx
347);
348impl_unary_operation_in_place!(arctangent_f32_in_place, f32, nppsArctan_32f_I_Ctx);
349impl_unary_operation_in_place!(arctangent_f64_in_place, f64, nppsArctan_64f_I_Ctx);
350impl_unary_operation_in_place!(not_u8_in_place, u8, nppsNot_8u_I_Ctx);
351impl_unary_operation_in_place!(not_u16_in_place, u16, nppsNot_16u_I_Ctx);
352impl_unary_operation_in_place!(not_u32_in_place, u32, nppsNot_32u_I_Ctx);
353impl_unary_operation_in_place!(square_f32_in_place, f32, nppsSqr_32f_I_Ctx);
354impl_unary_operation_in_place!(square_f64_in_place, f64, nppsSqr_64f_I_Ctx);
355impl_unary_operation_in_place!(square_f32_complex_in_place, Complex32, nppsSqr_32fc_I_Ctx);
356impl_unary_operation_in_place!(square_f64_complex_in_place, Complex64, nppsSqr_64fc_I_Ctx);
357impl_scaled_unary_operation_in_place!(square_u8_scaled_in_place, u8, nppsSqr_8u_ISfs_Ctx);
358impl_scaled_unary_operation_in_place!(square_u16_scaled_in_place, u16, nppsSqr_16u_ISfs_Ctx);
359impl_scaled_unary_operation_in_place!(square_i16_scaled_in_place, i16, nppsSqr_16s_ISfs_Ctx);
360impl_scaled_unary_operation_in_place!(
361 square_i16_complex_scaled_in_place,
362 ComplexI16,
363 nppsSqr_16sc_ISfs_Ctx
364);
365impl_unary_operation_in_place!(square_root_f32_in_place, f32, nppsSqrt_32f_I_Ctx);
366impl_unary_operation_in_place!(square_root_f64_in_place, f64, nppsSqrt_64f_I_Ctx);
367impl_unary_operation_in_place!(
368 square_root_f32_complex_in_place,
369 Complex32,
370 nppsSqrt_32fc_I_Ctx
371);
372impl_unary_operation_in_place!(
373 square_root_f64_complex_in_place,
374 Complex64,
375 nppsSqrt_64fc_I_Ctx
376);
377impl_scaled_unary_operation_in_place!(square_root_u8_scaled_in_place, u8, nppsSqrt_8u_ISfs_Ctx);
378impl_scaled_unary_operation_in_place!(square_root_u16_scaled_in_place, u16, nppsSqrt_16u_ISfs_Ctx);
379impl_scaled_unary_operation_in_place!(square_root_i16_scaled_in_place, i16, nppsSqrt_16s_ISfs_Ctx);
380impl_scaled_unary_operation_in_place!(
381 square_root_i16_complex_scaled_in_place,
382 ComplexI16,
383 nppsSqrt_16sc_ISfs_Ctx
384);
385impl_scaled_unary_operation_in_place!(square_root_i64_scaled_in_place, i64, nppsSqrt_64s_ISfs_Ctx);
386
387impl_normalize!(normalize_f32, f32, nppsNormalize_32f_Ctx);
388impl_normalize!(normalize_f64, f64, nppsNormalize_64f_Ctx);
389impl_complex_normalize!(
390 normalize_f32_complex,
391 Complex32,
392 f32,
393 nppsNormalize_32fc_Ctx
394);
395impl_complex_normalize!(
396 normalize_f64_complex,
397 Complex64,
398 f64,
399 nppsNormalize_64fc_Ctx
400);
401impl_scaled_normalize!(normalize_i16_scaled, i16, nppsNormalize_16s_Sfs_Ctx);
402impl_scaled_normalize!(
403 normalize_i16_complex_scaled,
404 ComplexI16,
405 nppsNormalize_16sc_Sfs_Ctx
406);
407
408impl_parameterized_unary_operation_in_place!(cauchy_f32_in_place, f32, f32, nppsCauchy_32f_I_Ctx);
409impl_parameterized_unary_operation_in_place!(
410 cauchy_derivative_f32_in_place,
411 f32,
412 f32,
413 nppsCauchyD_32f_I_Ctx
414);
415
416macro_rules! impl_signal_binary_dispatch {
417 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
418 pub trait $trait: DataTypeLike {
419 fn $method(
420 stream_context: &StreamContext,
421 left: &SignalView<'_, Self>,
422 right: &SignalView<'_, Self>,
423 destination: &mut SignalViewMut<'_, Self>,
424 ) -> Result<()>;
425 }
426
427 $(
428 impl $trait for $ty {
429 fn $method(
430 stream_context: &StreamContext,
431 left: &SignalView<'_, Self>,
432 right: &SignalView<'_, Self>,
433 destination: &mut SignalViewMut<'_, Self>,
434 ) -> Result<()> {
435 $direct(stream_context, left, right, destination)
436 }
437 }
438 )*
439
440 pub fn $function<T: $trait>(
441 stream_context: &StreamContext,
442 left: &SignalView<'_, T>,
443 right: &SignalView<'_, T>,
444 destination: &mut SignalViewMut<'_, T>,
445 ) -> Result<()> {
446 T::$method(stream_context, left, right, destination)
447 }
448 };
449}
450
451macro_rules! impl_signal_binary_in_place_dispatch {
452 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
453 pub trait $trait: DataTypeLike {
454 fn $method(
455 stream_context: &StreamContext,
456 signal: &SignalView<'_, Self>,
457 destination: &mut SignalViewMut<'_, Self>,
458 ) -> Result<()>;
459 }
460
461 $(
462 impl $trait for $ty {
463 fn $method(
464 stream_context: &StreamContext,
465 signal: &SignalView<'_, Self>,
466 destination: &mut SignalViewMut<'_, Self>,
467 ) -> Result<()> {
468 $direct(stream_context, signal, destination)
469 }
470 }
471 )*
472
473 pub fn $function<T: $trait>(
474 stream_context: &StreamContext,
475 signal: &SignalView<'_, T>,
476 destination: &mut SignalViewMut<'_, T>,
477 ) -> Result<()> {
478 T::$method(stream_context, signal, destination)
479 }
480 };
481}
482
483macro_rules! impl_signal_scaled_binary_dispatch {
484 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
485 pub trait $trait: DataTypeLike {
486 fn $method(
487 stream_context: &StreamContext,
488 left: &SignalView<'_, Self>,
489 right: &SignalView<'_, Self>,
490 destination: &mut SignalViewMut<'_, Self>,
491 scale_factor: i32,
492 ) -> Result<()>;
493 }
494
495 $(
496 impl $trait for $ty {
497 fn $method(
498 stream_context: &StreamContext,
499 left: &SignalView<'_, Self>,
500 right: &SignalView<'_, Self>,
501 destination: &mut SignalViewMut<'_, Self>,
502 scale_factor: i32,
503 ) -> Result<()> {
504 $direct(stream_context, left, right, destination, scale_factor)
505 }
506 }
507 )*
508
509 pub fn $function<T: $trait>(
510 stream_context: &StreamContext,
511 left: &SignalView<'_, T>,
512 right: &SignalView<'_, T>,
513 destination: &mut SignalViewMut<'_, T>,
514 scale_factor: i32,
515 ) -> Result<()> {
516 T::$method(stream_context, left, right, destination, scale_factor)
517 }
518 };
519}
520
521macro_rules! impl_signal_scaled_binary_in_place_dispatch {
522 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
523 pub trait $trait: DataTypeLike {
524 fn $method(
525 stream_context: &StreamContext,
526 signal: &SignalView<'_, Self>,
527 destination: &mut SignalViewMut<'_, Self>,
528 scale_factor: i32,
529 ) -> Result<()>;
530 }
531
532 $(
533 impl $trait for $ty {
534 fn $method(
535 stream_context: &StreamContext,
536 signal: &SignalView<'_, Self>,
537 destination: &mut SignalViewMut<'_, Self>,
538 scale_factor: i32,
539 ) -> Result<()> {
540 $direct(stream_context, signal, destination, scale_factor)
541 }
542 }
543 )*
544
545 pub fn $function<T: $trait>(
546 stream_context: &StreamContext,
547 signal: &SignalView<'_, T>,
548 destination: &mut SignalViewMut<'_, T>,
549 scale_factor: i32,
550 ) -> Result<()> {
551 T::$method(stream_context, signal, destination, scale_factor)
552 }
553 };
554}
555
556macro_rules! impl_signal_scaled_round_binary_dispatch {
557 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
558 pub trait $trait: DataTypeLike {
559 fn $method(
560 stream_context: &StreamContext,
561 left: &SignalView<'_, Self>,
562 right: &SignalView<'_, Self>,
563 destination: &mut SignalViewMut<'_, Self>,
564 scale_factor: i32,
565 round_mode: RoundMode,
566 ) -> Result<()>;
567 }
568
569 $(
570 impl $trait for $ty {
571 fn $method(
572 stream_context: &StreamContext,
573 left: &SignalView<'_, Self>,
574 right: &SignalView<'_, Self>,
575 destination: &mut SignalViewMut<'_, Self>,
576 scale_factor: i32,
577 round_mode: RoundMode,
578 ) -> Result<()> {
579 $direct(stream_context, left, right, destination, scale_factor, round_mode)
580 }
581 }
582 )*
583
584 pub fn $function<T: $trait>(
585 stream_context: &StreamContext,
586 left: &SignalView<'_, T>,
587 right: &SignalView<'_, T>,
588 destination: &mut SignalViewMut<'_, T>,
589 scale_factor: i32,
590 round_mode: RoundMode,
591 ) -> Result<()> {
592 T::$method(stream_context, left, right, destination, scale_factor, round_mode)
593 }
594 };
595}
596
597macro_rules! impl_signal_scaled_round_binary_in_place_dispatch {
598 ($trait:ident, $method:ident, $function:ident, [$($ty:ty => $direct:ident),* $(,)?]) => {
599 pub trait $trait: DataTypeLike {
600 fn $method(
601 stream_context: &StreamContext,
602 signal: &SignalView<'_, Self>,
603 destination: &mut SignalViewMut<'_, Self>,
604 scale_factor: i32,
605 round_mode: RoundMode,
606 ) -> Result<()>;
607 }
608
609 $(
610 impl $trait for $ty {
611 fn $method(
612 stream_context: &StreamContext,
613 signal: &SignalView<'_, Self>,
614 destination: &mut SignalViewMut<'_, Self>,
615 scale_factor: i32,
616 round_mode: RoundMode,
617 ) -> Result<()> {
618 $direct(stream_context, signal, destination, scale_factor, round_mode)
619 }
620 }
621 )*
622
623 pub fn $function<T: $trait>(
624 stream_context: &StreamContext,
625 signal: &SignalView<'_, T>,
626 destination: &mut SignalViewMut<'_, T>,
627 scale_factor: i32,
628 round_mode: RoundMode,
629 ) -> Result<()> {
630 T::$method(stream_context, signal, destination, scale_factor, round_mode)
631 }
632 };
633}
634
635impl_signal_binary_dispatch!(Add, add, add, [
636 i16 => add_i16,
637 u16 => add_u16,
638 u32 => add_u32,
639 f32 => add_f32,
640 f64 => add_f64,
641 Complex32 => add_f32_complex,
642 Complex64 => add_f64_complex
643]);
644impl_signal_binary_dispatch!(Subtract, subtract, subtract, [
645 i16 => subtract_i16,
646 f32 => subtract_f32,
647 f64 => subtract_f64,
648 Complex32 => subtract_f32_complex,
649 Complex64 => subtract_f64_complex
650]);
651impl_signal_binary_dispatch!(Multiply, multiply, multiply, [
652 i16 => multiply_i16,
653 f32 => multiply_f32,
654 f64 => multiply_f64,
655 Complex32 => multiply_f32_complex,
656 Complex64 => multiply_f64_complex
657]);
658impl_signal_binary_dispatch!(Divide, divide, divide, [
659 f32 => divide_f32,
660 f64 => divide_f64,
661 Complex32 => divide_f32_complex,
662 Complex64 => divide_f64_complex
663]);
664impl_signal_binary_dispatch!(And, and, and, [
665 u8 => and_u8,
666 u16 => and_u16,
667 u32 => and_u32
668]);
669impl_signal_binary_dispatch!(Or, or, or, [
670 u8 => or_u8,
671 u16 => or_u16,
672 u32 => or_u32
673]);
674impl_signal_binary_dispatch!(Xor, xor, xor, [
675 u8 => xor_u8,
676 u16 => xor_u16,
677 u32 => xor_u32
678]);
679
680impl_signal_binary_in_place_dispatch!(AddInPlace, add_in_place, add_in_place, [
681 i16 => add_i16_in_place,
682 f32 => add_f32_in_place,
683 f64 => add_f64_in_place,
684 Complex32 => add_f32_complex_in_place,
685 Complex64 => add_f64_complex_in_place
686]);
687impl_signal_binary_in_place_dispatch!(SubtractInPlace, subtract_in_place, subtract_in_place, [
688 i16 => subtract_i16_in_place,
689 f32 => subtract_f32_in_place,
690 f64 => subtract_f64_in_place,
691 Complex32 => subtract_f32_complex_in_place,
692 Complex64 => subtract_f64_complex_in_place
693]);
694impl_signal_binary_in_place_dispatch!(MultiplyInPlace, multiply_in_place, multiply_in_place, [
695 i16 => multiply_i16_in_place,
696 f32 => multiply_f32_in_place,
697 f64 => multiply_f64_in_place,
698 Complex32 => multiply_f32_complex_in_place,
699 Complex64 => multiply_f64_complex_in_place
700]);
701impl_signal_binary_in_place_dispatch!(DivideInPlace, divide_in_place, divide_in_place, [
702 f32 => divide_f32_in_place,
703 f64 => divide_f64_in_place,
704 Complex32 => divide_f32_complex_in_place,
705 Complex64 => divide_f64_complex_in_place
706]);
707impl_signal_binary_in_place_dispatch!(AndInPlace, and_in_place, and_in_place, [
708 u8 => and_u8_in_place,
709 u16 => and_u16_in_place,
710 u32 => and_u32_in_place
711]);
712impl_signal_binary_in_place_dispatch!(OrInPlace, or_in_place, or_in_place, [
713 u8 => or_u8_in_place,
714 u16 => or_u16_in_place,
715 u32 => or_u32_in_place
716]);
717impl_signal_binary_in_place_dispatch!(XorInPlace, xor_in_place, xor_in_place, [
718 u8 => xor_u8_in_place,
719 u16 => xor_u16_in_place,
720 u32 => xor_u32_in_place
721]);
722
723impl_signal_scaled_binary_dispatch!(AddScaled, add_scaled, add_scaled, [
724 u8 => add_u8_scaled,
725 u16 => add_u16_scaled,
726 i16 => add_i16_scaled,
727 i32 => add_i32_scaled,
728 i64 => add_i64_scaled,
729 ComplexI16 => add_i16_complex_scaled,
730 ComplexI32 => add_i32_complex_scaled
731]);
732impl_signal_scaled_binary_dispatch!(SubtractScaled, subtract_scaled, subtract_scaled, [
733 u8 => subtract_u8_scaled,
734 u16 => subtract_u16_scaled,
735 i16 => subtract_i16_scaled,
736 i32 => subtract_i32_scaled,
737 ComplexI16 => subtract_i16_complex_scaled,
738 ComplexI32 => subtract_i32_complex_scaled
739]);
740impl_signal_scaled_binary_dispatch!(MultiplyScaled, multiply_scaled, multiply_scaled, [
741 u8 => multiply_u8_scaled,
742 u16 => multiply_u16_scaled,
743 i16 => multiply_i16_scaled,
744 i32 => multiply_i32_scaled,
745 ComplexI16 => multiply_i16_complex_scaled,
746 ComplexI32 => multiply_i32_complex_scaled
747]);
748impl_signal_scaled_binary_dispatch!(DivideScaled, divide_scaled, divide_scaled, [
749 u8 => divide_u8_scaled,
750 u16 => divide_u16_scaled,
751 i16 => divide_i16_scaled,
752 i32 => divide_i32_scaled,
753 ComplexI16 => divide_i16_complex_scaled
754]);
755impl_signal_scaled_round_binary_dispatch!(DivideScaledRound, divide_scaled_round, divide_scaled_round, [
756 u8 => divide_u8_scaled_round,
757 u16 => divide_u16_scaled_round,
758 i16 => divide_i16_scaled_round
759]);
760
761impl_signal_scaled_binary_in_place_dispatch!(AddScaledInPlace, add_scaled_in_place, add_scaled_in_place, [
762 u8 => add_u8_scaled_in_place,
763 u16 => add_u16_scaled_in_place,
764 i16 => add_i16_scaled_in_place,
765 i32 => add_i32_scaled_in_place,
766 ComplexI16 => add_i16_complex_scaled_in_place,
767 ComplexI32 => add_i32_complex_scaled_in_place
768]);
769impl_signal_scaled_binary_in_place_dispatch!(SubtractScaledInPlace, subtract_scaled_in_place, subtract_scaled_in_place, [
770 u8 => subtract_u8_scaled_in_place,
771 u16 => subtract_u16_scaled_in_place,
772 i16 => subtract_i16_scaled_in_place,
773 i32 => subtract_i32_scaled_in_place,
774 ComplexI16 => subtract_i16_complex_scaled_in_place,
775 ComplexI32 => subtract_i32_complex_scaled_in_place
776]);
777impl_signal_scaled_binary_in_place_dispatch!(MultiplyScaledInPlace, multiply_scaled_in_place, multiply_scaled_in_place, [
778 u8 => multiply_u8_scaled_in_place,
779 u16 => multiply_u16_scaled_in_place,
780 i16 => multiply_i16_scaled_in_place,
781 i32 => multiply_i32_scaled_in_place,
782 ComplexI16 => multiply_i16_complex_scaled_in_place,
783 ComplexI32 => multiply_i32_complex_scaled_in_place
784]);
785impl_signal_scaled_binary_in_place_dispatch!(DivideScaledInPlace, divide_scaled_in_place, divide_scaled_in_place, [
786 u8 => divide_u8_scaled_in_place,
787 u16 => divide_u16_scaled_in_place,
788 i16 => divide_i16_scaled_in_place,
789 i32 => divide_i32_scaled_in_place,
790 ComplexI16 => divide_i16_complex_scaled_in_place
791]);
792impl_signal_scaled_round_binary_in_place_dispatch!(DivideScaledRoundInPlace, divide_scaled_round_in_place, divide_scaled_round_in_place, [
793 u8 => divide_u8_scaled_round_in_place,
794 u16 => divide_u16_scaled_round_in_place,
795 i16 => divide_i16_scaled_round_in_place
796]);