1 /*
2 linear_algebra.cpp:
3
4 Copyright (C) 2008 by Michael Gogins
5
6 This file is part of Csound.
7
8 The Csound Library is free software; you can redistribute it
9 and/or modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 Csound is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with Csound; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21 02110-1301 USA
22 */
23
24 /**
25 * L I N E A R A L G E B R A O P C O D E S F O R C S O U N D
26 * Michael Gogins
27 *
28 * These opcodes implement many linear algebra operations,
29 * from scalar, vector, and matrix arithmetic up to
30 * and including QR based eigenvalue decompositions.
31 * The opcodes are designed for digital signal processing,
32 * and of course other mathematical operations,
33 * in the Csound orchestra language.
34 *
35 * The numerical implementation uses the gmm++ library
36 * from http://home.gna.org/getfem/gmm_intro.
37 *
38 * NOTE: SDFT must be #defined in order to build and use these opcodes.
39 *
40 * For applications with f-sig variables, array arithmetic must be
41 * performed only when the f-sig is "current," because f-rate
42 * is some fraction of k-rate; currency can be determined with the
43 * la_k_current_f opcode.
44 *
45 * For applications using assignments between real vectors and
46 * a-rate variables, array arithmetic must be performed only when the
47 * vectors are "current", because the size of the vector may be
48 * some integral multiple of ksmps; currency can be determined
49 * by means of the la_k_current_vr opcode.
50 *
51 * Linear Algebra Data Types
52 * -------------------------
53 *
54 * Mathematical Type Code Corresponding Csound Type or Types
55 * ----------------- ---- -------------------------------------------------
56 * real scalar r i-rate or k-rate variable
57 * complex scalar c pair of i-rate or k-rate variables, e.g. "kr, ki"
58 * real vector vr i-rate variable holding address of array
59 * a a-rate variable
60 * t function table number
61 * complex vector vc i-rate variable holding address of array
62 * f fsig variable
63 * real matrix mr i-rate variable holding address of array
64 * complex matrix mc i-rate variable holding address of array
65 *
66 * All arrays are 0-based; the first index iterates rows to give columns,
67 * the second index iterates columns to give elements.
68 *
69 * All arrays are general and dense; banded, Hermitian, symmetric
70 * and sparse routines are not implemented.
71 *
72 * An array can be of type code vr, vc, mr, or mc
73 * and is stored in an i-rate object.
74 * In orchestra code, an array is passed as a
75 * MYFLT i-rate variable that contains the address
76 * of the array object, which is actually stored
77 * in the allocator opcode instance.
78 * Although array variables are i-rate, of course
79 * their values and even shapes may change at i-rate or k-rate.
80 *
81 * All operands must be pre-allocated; except for the creation
82 * opcodes, no opcode ever allocates any arrays.
83 * This is true even if the array appears on the
84 * left-hand side of an opcode! However, some operations
85 * may reshape arrays to hold results.
86 *
87 * Arrays are automatically deallocated when their instrument
88 * is deallocated.
89 *
90 * Not only for more efficient performance,
91 * but also to make it easier to remember opcode names,
92 * the performance rate, output value types, operation names,
93 * and input value types are deterministically
94 * encoded into the opcode name:
95 * 1. "la" for "linear algebra opcode family".
96 * 2. "i" or "k" for performance rate.
97 * 3. Type code(s) (see above table) for output value(s),
98 * but only if the type is not implicit from the input values.
99 * 4. Operation name: common mathematical name
100 * (preferred) or abbreviation.
101 * 5. Type code(s) for input values, if not implicit.
102 *
103 * For details, see the gmm++ documentation at
104 * http://download.gna.org/getfem/doc/gmmuser.pdf.
105 *
106 * Array Creation
107 * --------------
108 *
109 * ivr la_i_vr_create irows
110 * ivc la_i_vc_create irows
111 * imr la_i_mr_create irows, icolumns [,
112 odiagonal]
113 * imc la_i_mc_create irows, icolumns
114 [, odiagonal_r,
115 odiagonal_i]
116 *
117 * Array Introspection
118 * -------------------
119 *
120 * irows la_i_size_vr ivr
121 * irows la_i_size_vc ivc
122 * irows, icolumns la_i_size_mr imr
123 * irows, icolumns la_i_size_mc imc
124 *
125 * kfiscurrent la_k_current_f fsig
126 * kvriscurrent la_k_current_vr ivr
127 *
128 * la_i_print_vr ivr
129 * la_i_print_vc ivc
130 * la_i_print_mr imr
131 * la_i_print_mc imc
132 *
133 * Array Assignment and Conversion
134 * -------------------------------
135 *
136 * ivr la_i_assign_vr ivr
137 * ivr la_k_assign_vr ivr
138 * ivc la_i_assign_vc ivc
139 * ivc la_k_assign_vc ivr
140 * imr la_i_assign_mr imr
141 * imr la_k_assign_mr imr
142 * imc la_i_assign_mc imc
143 * imc la_k_assign_mc imr
144 *
145 * NOTE: Assignments from tables or fsigs will resize vectors.
146 * Assignments to or from asigs are incremental -- ksmps
147 * frames are copied each kperiod and the array index
148 * wraps around as required.
149 *
150 * ivr la_k_assign_a asig
151 * ivr la_i_assign_t itablenumber
152 * ivr la_k_assign_t itablenumber
153 * ivc la_k_assign_f fsig
154 *
155 * asig la_k_a_assign ivr
156 * itablenum la_i_t_assign ivr
157 * itablenum la_k_t_assign ivr
158 * fsig la_k_f_assign ivc
159 *
160 * Fill Arrays with Random Elements
161 * --------------------------------
162 *
163 * ivr la_i_random_vr [ifill_fraction]
164 * ivr la_k_random_vr [kfill_fraction]
165 * ivc la_i_random_vc [ifill_fraction]
166 * ivc la_k_random_vc [kfill_fraction]
167 * imr la_i_random_mr [ifill_fraction]
168 * imr la_k_random_mr [kfill_fraction]
169 * imc la_i_random_mc [ifill_fraction]
170 * imc la_k_random_mc [kfill_fraction]
171 *
172 * Array Element Access
173 * --------------------
174 *
175 * ivr la_i_vr_set irow, ivalue
176 * kvr la_k_vr_set krow, kvalue
177 * ivc la_i_vc_set irow, ivalue_r, ivalue_i
178 * kvc la_k_vc_set krow, kvalue_r, kvalue_i
179 * imr la_i mr_set irow, icolumn, ivalue
180 * kmr la_k mr_set krow, kcolumn, ivalue
181 * imc la_i_mc_set irow, icolumn, ivalue_r,
182 ivalue_i
183 * kmc la_k_mc_set krow, kcolumn, kvalue_r,
184 kvalue_i
185 *
186 * ivalue la_i_get_vr ivr, irow
187 * kvalue la_k_get_vr ivr, krow,
188 * ivalue_r, ivalue_i la_i_get_vc ivc, irow
189 * kvalue_r, kvalue_i la_k_get_vc ivc, krow
190 * ivalue la_i_get_mr imr, irow, icolumn
191 * kvalue la_k_get_mr imr, krow, kcolumn
192 * ivalue_r, ivalue_i la_i_get_mc imc, irow, icolumn
193 * kvalue_r, kvalue_i la_k_get_mc imc, krow, kcolumn
194 *
195 * Single Array Operations
196 * -----------------------
197 *
198 * imr la_i_transpose_mr imr
199 * imr la_k_transpose_mr imr
200 * imc la_i_transpose_mc imc
201 * imc la_k_transpose_mc imc
202
203 * ivr la_i_conjugate_vr ivr
204 * ivr la_k_conjugate_vr ivr
205 * ivc la_i_conjugate_vc ivc
206 * ivc la_k_conjugate_vc ivc
207 * imr la_i_conjugate_mr imr
208 * imr la_k_conjugate_mr imr
209 * imc la_i_conjugate_mc imc
210 * imc la_k_conjugate_mc imc
211 *
212 * Scalar Operations
213 * -----------------
214 *
215 * ir la_i_norm1_vr ivr
216 * kr la_k_norm1_vr ivc
217 * ir la_i_norm1_vc ivc
218 * kr la_k_norm1_vc ivc
219 * ir la_i_norm1_mr imr
220 * kr la_k_norm1_mr imr
221 * ir la_i_norm1_mc imc
222 * kr la_k_norm1_mc imc
223 *
224 * ir la_i_norm_euclid_vr ivr
225 * kr la_k_norm_euclid_vr ivr
226 * ir la_i_norm_euclid_vc ivc
227 * kr la_k_norm_euclid_vc ivc
228 * ir la_i_norm_euclid_mr mvr
229 * kr la_k_norm_euclid_mr mvr
230 * ir la_i_norm_euclid_mc mvc
231 * kr la_k_norm_euclid_mc mvc
232 *
233 * ir la_i_distance_vr ivr
234 * kr la_k_distance_vr ivr
235 * ir la_i_distance_vc ivc
236 * kr la_k_distance_vc ivc
237 *
238 * ir la_i_norm_max imr
239 * kr la_k_norm_max imc
240 * ir la_i_norm_max imr
241 * kr la_k_norm_max imc
242 *
243 * ir la_i_norm_inf_vr ivr
244 * kr la_k_norm_inf_vr ivr
245 * ir la_i_norm_inf_vc ivc
246 * kr la_k_norm_inf_vc ivc
247 * ir la_i_norm_inf_mr imr
248 * kr la_k_norm_inf_mr imr
249 * ir la_i_norm_inf_mc imc
250 * kr la_k_norm_inf_mc imc
251 *
252 * ir la_i_trace_mr imr
253 * kr la_k_trace_mr imr
254 * ir, ii la_i_trace_mc imc
255 * kr, ki la_k_trace_mc imc
256 *
257 * ir la_i_lu_det imr
258 * kr la_k_lu_det imr
259 * ir la_i_lu_det imc
260 * kr la_k_lu_det imc
261 *
262 * Elementwise Array-Array Operations
263 * ----------------------------------
264 *
265 * ivr la_i_add_vr ivr_a, ivr_b
266 * ivc la_k_add_vc ivc_a, ivc_b
267 * imr la_i_add_mr imr_a, imr_b
268 * imc la_k_add_mc imc_a, imc_b
269 *
270 * ivr la_i_subtract_vr ivr_a, ivr_b
271 * ivc la_k_subtract_vc ivc_a, ivc_b
272 * imr la_i_subtract_mr imr_a, imr_b
273 * imc la_k_subtract_mc imc_a, imc_b
274 *
275 * ivr la_i_multiply_vr ivr_a, ivr_b
276 * ivc la_k_multiply_vc ivc_a, ivc_b
277 * imr la_i_multiply_mr imr_a, imr_b
278 * imc la_k_multiply_mc imc_a, imc_b
279 *
280 * ivr la_i_divide_vr ivr_a, ivr_b
281 * ivc la_k_divide_vc ivc_a, ivc_b
282 * imr la_i_divide_mr imr_a, imr_b
283 * imc la_k_divide_mc imc_a, imc_b
284 *
285 * Inner Products
286 * --------------
287 *
288 * ir la_i_dot_vr ivr_a, ivr_b
289 * kr la_k_dot_vr ivr_a, ivr_b
290 * ir, ii la_i_dot_vc ivc_a, ivc_b
291 * kr, ki la_k_dot_vc ivc_a, ivc_b
292 *
293 * imr la_i_dot_mr imr_a, imr_b
294 * imr la_k_dot_mr imr_a, imr_b
295 * imc la_i_dot_mc imc_a, imc_b
296 * imc la_k_dot_mc imc_a, imc_b
297 *
298 * ivr la_i_dot_mr_vr imr_a, ivr_b
299 * ivr la_k_dot_mr_vr imr_a, ivr_b
300 * ivc la_i_dot_mc_vc imc_a, ivc_b
301 * ivc la_k_dot_mc_vc imc_a, ivc_b
302 *
303 * Matrix Inversion
304 * ----------------
305 *
306 * imr, icondition la_i_invert_mr imr
307 * imr, kcondition la_k_invert_mr imr
308 * imc, icondition la_i_invert_mc imc
309 * imc, kcondition la_k_invert_mc imc
310 *
311 * Matrix Decompositions and Solvers
312 * ---------------------------------
313 *
314 * ivr la_i_upper_solve_mr imr [, j_1_diagonal]
315 * ivr la_k_upper_solve_mr imr [, j_1_diagonal]
316 * ivc la_i_upper_solve_mc imc [, j_1_diagonal]
317 * ivc la_k_upper_solve_mc imc [, j_1_diagonal]
318 *
319 * ivr la_i_lower_solve_mr imr [, j_1_diagonal]
320 * ivr la_k_lower_solve_mr imr [, j_1_diagonal]
321 * ivc la_i_lower_solve_mc imc [, j_1_diagonal]
322 * ivc la_k_lower_solve_mc imc [, j_1_diagonal]
323 *
324 * imr, ivr_pivot, isize la_i_lu_factor_mr imr
325 * imr, ivr_pivot, ksize la_k_lu_factor_mr imr
326 * imc, ivr_pivot, isize la_i_lu_factor_mc imc
327 * imc, ivr_pivot, ksize la_k_lu_factor_mc imc
328 *
329 * ivr_x la_i_lu_solve_mr imr, ivr_b
330 * ivr_x la_k_lu_solve_mr imr, ivr_b
331 * ivc_x la_i_lu_solve_mc imc, ivc_b
332 * ivc_x la_k_lu_solve_mc imc, ivc_b
333 *
334 * imr_q, imr_r la_i_qr_factor_mr imr
335 * imr_q, imr_r la_k_qr_factor_mr imr
336 * imc_q, imc_r la_i_qr_factor_mc imc
337 * imc_q, imc_r la_k_qr_factor_mc imc
338 *
339 * ivr_eig_vals la_i_qr_eigen_mr imr, i_tolerance
340 * ivr_eig_vals la_k_qr_eigen_mr imr, k_tolerance
341 * ivr_eig_vals la_i_qr_eigen_mc imc, i_tolerance
342 * ivr_eig_vals la_k_qr_eigen_mc imc, k_tolerance
343 *
344 * NOTE: Matrix must be Hermitian in order to compute eigenvectors.
345 *
346 * ivr_eig_vals, imr_eig_vecs la_i_qr_sym_eigen_mr imr, i_tolerance
347 * ivr_eig_vals, imr_eig_vecs la_k_qr_sym_eigen_mr imr, k_tolerance
348 * ivc_eig_vals, imc_eig_vecs la_i_qr_sym_eigen_mc imc, i_tolerance
349 * ivc_eig_vals, imc_eig_vecs la_k_qr_sym_eigen_mc imc, k_tolerance
350 *
351 */
352
353 extern "C" {
354 // a-rate, k-rate, FUNC, SPECDAT
355 #include <csdl.h>
356 // PVSDAT
357 #include <pstream.h>
358 }
359
360 #ifdef ST
361 #undef ST
362 #endif
363
364 #ifdef WR
365 #undef WR
366 #endif
367
368 #include <OpcodeBase.hpp>
369 #include <complex>
370 #include <gmm/gmm.h>
371 #include <sstream>
372 #include <vector>
373
374 using namespace csound;
375
operator <<(std::ostream & o,const std::vector<double> & m)376 static std::ostream &operator<<(std::ostream &o, const std::vector<double> &m) {
377 gmm::write(o, m);
378 return o;
379 }
380
operator <<(std::ostream & o,const std::vector<std::complex<double>> & m)381 static std::ostream &operator<<(std::ostream &o,
382 const std::vector<std::complex<double>> &m) {
383 gmm::write(o, m);
384 return o;
385 }
386
387 /**
388 * Template union for safely and efficiently
389 * typecasting the value of a MYFLT variable
390 * to the address of an array, and vice versa.
391 */
392 template <typename A, typename F> struct ArrayCaster {
393 union {
394 A *a;
395 F f;
396 };
397 };
398
399 /**
400 * Safely and efficiently typecast the address
401 * of an array to the value of a MYFLT variable.
402 */
tof(A * a,F * f)403 template <typename A, typename F> void tof(A *a, F *f) {
404 ArrayCaster<A, F> arrayCaster;
405 arrayCaster.a = a;
406 *f = arrayCaster.f;
407 };
408
409 /**
410 * Safely and efficiently typecast the value of a
411 * a MYFLT variable to the address of an array.
412 */
toa(F * f,A * & a)413 template <typename A, typename F> void toa(F *f, A *&a) {
414 ArrayCaster<A, F> arrayCaster;
415 arrayCaster.f = *f;
416 a = arrayCaster.a;
417 };
418
419 class la_i_vr_create_t : public OpcodeNoteoffBase<la_i_vr_create_t> {
420 public:
421 MYFLT *i_vr;
422 MYFLT *i_rows;
423 std::vector<MYFLT> vr;
init(CSOUND *)424 int init(CSOUND *) {
425 vr.resize(size_t(*i_rows));
426 tof(this, i_vr);
427 return OK;
428 }
noteoff(CSOUND *)429 int noteoff(CSOUND *) {
430 vr.resize(0);
431 return OK;
432 }
433 };
434
435 class la_i_vc_create_t : public OpcodeNoteoffBase<la_i_vc_create_t> {
436 public:
437 MYFLT *i_vc;
438 MYFLT *i_rows;
439 std::vector<std::complex<MYFLT>> vc;
init(CSOUND *)440 int init(CSOUND *) {
441 vc.resize(size_t(*i_rows));
442 tof(this, i_vc);
443 return OK;
444 }
noteoff(CSOUND *)445 int noteoff(CSOUND *) {
446 vc.resize(0);
447 return OK;
448 }
449 };
450
451 class la_i_mr_create_t : public OpcodeNoteoffBase<la_i_mr_create_t> {
452 public:
453 MYFLT *i_mr;
454 MYFLT *i_rows;
455 MYFLT *i_columns;
456 MYFLT *o_diagonal;
457 gmm::dense_matrix<MYFLT> mr;
init(CSOUND *)458 int init(CSOUND *) {
459 gmm::resize(mr, size_t(*i_rows), size_t(*i_columns));
460 if (*o_diagonal) {
461 for (size_t i = 0, n = size_t(*i_rows); i < n; ++i) {
462 mr(i, i) = *o_diagonal;
463 }
464 }
465 tof(this, i_mr);
466 return OK;
467 }
noteoff(CSOUND *)468 int noteoff(CSOUND *) {
469 mr.resize(0, 0);
470 return OK;
471 }
472 };
473
474 class la_i_mc_create_t : public OpcodeNoteoffBase<la_i_mc_create_t> {
475 public:
476 MYFLT *i_mc;
477 MYFLT *i_rows;
478 MYFLT *i_columns;
479 MYFLT *o_diagonal_r;
480 MYFLT *o_diagonal_i;
481 gmm::dense_matrix<std::complex<MYFLT>> mc;
init(CSOUND *)482 int init(CSOUND *) {
483 gmm::resize(mc, size_t(*i_rows), size_t(*i_columns));
484 if (*o_diagonal_r || *o_diagonal_i) {
485 for (size_t i = 0, n = size_t(*i_rows); i < n; ++i) {
486 mc(i, i) = std::complex<MYFLT>(*o_diagonal_r, *o_diagonal_i);
487 }
488 }
489 tof(this, i_mc);
490 return OK;
491 }
noteoff(CSOUND *)492 int noteoff(CSOUND *) {
493 mc.resize(0, 0);
494 return OK;
495 }
496 };
497
498 class la_i_size_vr_t : public OpcodeBase<la_i_size_vr_t> {
499 public:
500 MYFLT *i_size;
501 MYFLT *i_vr;
init(CSOUND *)502 int init(CSOUND *) {
503 la_i_vr_create_t *array = 0;
504 toa(i_vr, array);
505 *i_size = (MYFLT)gmm::vect_size(array->vr);
506 return OK;
507 }
508 };
509
510 class la_i_size_vc_t : public OpcodeBase<la_i_size_vc_t> {
511 public:
512 MYFLT *i_size;
513 MYFLT *i_vc;
init(CSOUND *)514 int init(CSOUND *) {
515 la_i_vc_create_t *array = 0;
516 toa(i_vc, array);
517 *i_size = (MYFLT)gmm::vect_size(array->vc);
518 return OK;
519 }
520 };
521
522 class la_i_size_mr_t : public OpcodeBase<la_i_size_mr_t> {
523 public:
524 MYFLT *i_rows;
525 MYFLT *i_columns;
526 MYFLT *i_mr;
init(CSOUND *)527 int init(CSOUND *) {
528 la_i_mr_create_t *array = 0;
529 toa(i_mr, array);
530 *i_rows = (MYFLT)gmm::mat_nrows(array->mr);
531 *i_columns = (MYFLT)gmm::mat_ncols(array->mr);
532 return OK;
533 }
534 };
535
536 class la_i_size_mc_t : public OpcodeBase<la_i_size_mc_t> {
537 public:
538 MYFLT *i_rows;
539 MYFLT *i_columns;
540 MYFLT *i_mc;
init(CSOUND *)541 int init(CSOUND *) {
542 la_i_mc_create_t *array = 0;
543 toa(i_mc, array);
544 *i_rows = (MYFLT)gmm::mat_nrows(array->mc);
545 *i_columns = (MYFLT)gmm::mat_ncols(array->mc);
546 return OK;
547 }
548 };
549
550 /**
551 * Return 1 if the input f-sig is current
552 * (i.e., if its value might change in the next kperiod);
553 * return 0 if the input f-sig is not current.
554 *
555 * Example:
556 *
557 * kcurrent la_k_current_f fsig
558 * if (kcurrent == 1.0) then
559 * ; arithmetic on fsig here...
560 * endif
561 */
562 class la_k_current_f_t : public OpcodeBase<la_k_current_f_t> {
563 public:
564 MYFLT *k_current;
565 PVSDAT *f_sig;
566 size_t last_frame;
init(CSOUND *)567 int init(CSOUND *) {
568 last_frame = f_sig->framecount;
569 return OK;
570 }
kontrol(CSOUND *)571 int kontrol(CSOUND *) {
572 if (last_frame < f_sig->framecount) {
573 last_frame = f_sig->framecount;
574 *k_current = 1.0;
575 } else {
576 *k_current = 0.0;
577 }
578 return OK;
579 }
580 };
581
582 /**
583 * Return 1 if the real vector is current (i.e., its
584 * current index equals 0); return 0 if the input
585 * real vector is not current. A real vector is current
586 * in the very first kperiod of performance,
587 * and at each subsequent kperiod where ksmps has
588 * accumulated past the end of the vector and
589 * has wrapped back to index 0. For this to be
590 * possible, the size of the vector must be an integral
591 * multiple of ksmps.
592 *
593 * Example:
594 *
595 * ; FIRST, assignments from a-rate variables to vectors.
596 * kcurrent la_k_current_vr ivr
597 * if (kcurrent == 1.0) then
598 * ; SECOND, arithmetic with current vectors.
599 * endif
600 * ; THIRD, assignments from vectors to a-rate variables.
601 */
602
603 class la_k_current_vr_t : public OpcodeBase<la_k_current_vr_t> {
604 public:
605 MYFLT *k_current;
606 MYFLT *rhs_ivr;
607 la_i_vr_create_t *rhs;
608 size_t ksmps;
609 size_t vector_size;
init(CSOUND * csound)610 int init(CSOUND *csound) {
611 rhs = 0;
612 toa(rhs_ivr, rhs);
613 ksmps = opds.insdshead->ksmps;
614 vector_size = gmm::vect_size(rhs->vr);
615 return OK;
616 }
kontrol(CSOUND * csound)617 int kontrol(CSOUND *csound) {
618 size_t frame_count = opds.insdshead->kcounter * ksmps;
619 size_t index = frame_count % vector_size;
620 if (index == 0) {
621 *k_current = 1.0;
622 } else {
623 *k_current = 0.0;
624 }
625 return OK;
626 }
627 };
628
629 class la_i_print_vr_t : public OpcodeBase<la_i_print_vr_t> {
630 public:
631 MYFLT *i_vr;
init(CSOUND * csound)632 int init(CSOUND *csound) {
633 la_i_vr_create_t *array = 0;
634 toa(i_vr, array);
635 std::ostringstream stream;
636 stream << array->vr << std::endl;
637 csound->Message(csound, "%s", stream.str().c_str());
638 return OK;
639 }
640 };
641
642 class la_i_print_vc_t : public OpcodeBase<la_i_print_vc_t> {
643 public:
644 MYFLT *i_vc;
init(CSOUND * csound)645 int init(CSOUND *csound) {
646 la_i_vc_create_t *array = 0;
647 toa(i_vc, array);
648 std::ostringstream stream;
649 stream << array->vc << std::endl;
650 csound->Message(csound, "%s", stream.str().c_str());
651 return OK;
652 }
653 };
654
655 class la_i_print_mr_t : public OpcodeBase<la_i_print_mr_t> {
656 public:
657 MYFLT *i_mr;
init(CSOUND * csound)658 int init(CSOUND *csound) {
659 la_i_mr_create_t *array = 0;
660 toa(i_mr, array);
661 std::ostringstream stream;
662 stream << array->mr << std::endl;
663 csound->Message(csound, "%s", stream.str().c_str());
664 return OK;
665 }
666 };
667
668 class la_i_print_mc_t : public OpcodeBase<la_i_print_mc_t> {
669 public:
670 MYFLT *i_mc;
init(CSOUND * csound)671 int init(CSOUND *csound) {
672 la_i_mc_create_t *array = 0;
673 toa(i_mc, array);
674 std::ostringstream stream;
675 stream << array->mc << std::endl;
676 csound->Message(csound, "%s", stream.str().c_str());
677 return OK;
678 }
679 };
680
681 class la_i_assign_vr_t : public OpcodeBase<la_i_assign_vr_t> {
682 public:
683 MYFLT *i_vr_lhs;
684 MYFLT *i_vr_rhs;
685 la_i_vr_create_t *lhs;
686 la_i_vr_create_t *rhs;
init(CSOUND * csound)687 int init(CSOUND *csound) {
688 toa(i_vr_lhs, lhs);
689 toa(i_vr_rhs, rhs);
690 gmm::copy(rhs->vr, lhs->vr);
691 return OK;
692 }
693 };
694
695 class la_k_assign_vr_t : public OpcodeBase<la_k_assign_vr_t> {
696 public:
697 MYFLT *i_vr_lhs;
698 MYFLT *i_vr_rhs;
699 la_i_vr_create_t *lhs;
700 la_i_vr_create_t *rhs;
init(CSOUND * csound)701 int init(CSOUND *csound) {
702 toa(i_vr_lhs, lhs);
703 toa(i_vr_rhs, rhs);
704 return OK;
705 }
kontrol(CSOUND * csound)706 int kontrol(CSOUND *csound) {
707 gmm::copy(rhs->vr, lhs->vr);
708 return OK;
709 }
710 };
711
712 class la_i_assign_vc_t : public OpcodeBase<la_i_assign_vc_t> {
713 public:
714 MYFLT *i_vc_lhs;
715 MYFLT *i_vc_rhs;
716 la_i_vc_create_t *lhs;
717 la_i_vc_create_t *rhs;
init(CSOUND * csound)718 int init(CSOUND *csound) {
719 toa(i_vc_lhs, lhs);
720 toa(i_vc_rhs, rhs);
721 gmm::copy(rhs->vc, lhs->vc);
722 return OK;
723 }
724 };
725
726 class la_k_assign_vc_t : public OpcodeBase<la_k_assign_vc_t> {
727 public:
728 MYFLT *i_vc_lhs;
729 MYFLT *i_vc_rhs;
730 la_i_vc_create_t *lhs;
731 la_i_vc_create_t *rhs;
init(CSOUND * csound)732 int init(CSOUND *csound) {
733 toa(i_vc_lhs, lhs);
734 toa(i_vc_rhs, rhs);
735 return OK;
736 }
kontrol(CSOUND * csound)737 int kontrol(CSOUND *csound) {
738 gmm::copy(rhs->vc, lhs->vc);
739 return OK;
740 }
741 };
742
743 class la_i_assign_mr_t : public OpcodeBase<la_i_assign_mr_t> {
744 public:
745 MYFLT *i_mr_lhs;
746 MYFLT *i_mr_rhs;
747 la_i_mr_create_t *lhs;
748 la_i_mr_create_t *rhs;
init(CSOUND * csound)749 int init(CSOUND *csound) {
750 toa(i_mr_lhs, lhs);
751 toa(i_mr_rhs, rhs);
752 gmm::copy(rhs->mr, lhs->mr);
753 return OK;
754 }
755 };
756
757 class la_k_assign_mr_t : public OpcodeBase<la_k_assign_mr_t> {
758 public:
759 MYFLT *i_mr_lhs;
760 MYFLT *i_mr_rhs;
761 la_i_mr_create_t *lhs;
762 la_i_mr_create_t *rhs;
init(CSOUND * csound)763 int init(CSOUND *csound) {
764 toa(i_mr_lhs, lhs);
765 toa(i_mr_rhs, rhs);
766 return OK;
767 }
kontrol(CSOUND * csound)768 int kontrol(CSOUND *csound) {
769 gmm::copy(rhs->mr, lhs->mr);
770 return OK;
771 }
772 };
773
774 class la_i_assign_mc_t : public OpcodeBase<la_i_assign_mc_t> {
775 public:
776 MYFLT *i_mc_lhs;
777 MYFLT *i_mc_rhs;
778 la_i_mc_create_t *lhs;
779 la_i_mc_create_t *rhs;
init(CSOUND * csound)780 int init(CSOUND *csound) {
781 toa(i_mc_lhs, lhs);
782 toa(i_mc_rhs, rhs);
783 gmm::copy(rhs->mc, lhs->mc);
784 return OK;
785 }
786 };
787
788 class la_k_assign_mc_t : public OpcodeBase<la_k_assign_mc_t> {
789 public:
790 MYFLT *i_mc_lhs;
791 MYFLT *i_mc_rhs;
792 la_i_mc_create_t *lhs;
793 la_i_mc_create_t *rhs;
init(CSOUND * csound)794 int init(CSOUND *csound) {
795 toa(i_mc_lhs, lhs);
796 toa(i_mc_rhs, rhs);
797 return OK;
798 }
kontrol(CSOUND * csound)799 int kontrol(CSOUND *csound) {
800 gmm::copy(rhs->mc, lhs->mc);
801 return OK;
802 }
803 };
804
805 class la_k_assign_a_t : public OpcodeBase<la_k_assign_a_t> {
806 public:
807 MYFLT *i_vr;
808 MYFLT *a_a;
809 la_i_vr_create_t *lhs;
810 size_t ksmps;
811 size_t vector_size;
init(CSOUND * csound)812 int init(CSOUND *csound) {
813 toa(i_vr, lhs);
814 ksmps = opds.insdshead->ksmps;
815 vector_size = gmm::vect_size(lhs->vr);
816 return OK;
817 }
kontrol(CSOUND * csound)818 int kontrol(CSOUND *csound) {
819 uint32_t offset = opds.insdshead->ksmps_offset;
820 uint32_t early = opds.insdshead->ksmps_no_end;
821 size_t frame_count = opds.insdshead->ksmps * ksmps;
822 size_t array_i = frame_count % vector_size;
823 if (UNLIKELY(early))
824 ksmps -= early;
825 for (size_t i = offset; i < ksmps; ++i, ++array_i) {
826 lhs->vr[array_i] = a_a[i];
827 }
828 return OK;
829 }
830 };
831
832 class la_i_assign_t_t : public OpcodeBase<la_i_assign_t_t> {
833 public:
834 MYFLT *i_vr;
835 MYFLT *i_tablenumber;
836 la_i_vr_create_t *lhs;
837 int tablenumber;
838 int n;
init(CSOUND * csound)839 int init(CSOUND *csound) {
840 toa(i_vr, lhs);
841 tablenumber = int(std::floor(*i_tablenumber));
842 n = csound->TableLength(csound, tablenumber);
843 gmm::resize(lhs->vr, n);
844 for (int i = 0; i < n; ++i) {
845 lhs->vr[i] = csound->TableGet(csound, tablenumber, i);
846 }
847 return OK;
848 }
849 };
850
851 class la_k_assign_t_t : public OpcodeBase<la_k_assign_t_t> {
852 public:
853 MYFLT *i_vr;
854 MYFLT *i_tablenumber;
855 la_i_vr_create_t *lhs;
856 int tablenumber;
857 int n;
init(CSOUND * csound)858 int init(CSOUND *csound) {
859 toa(i_vr, lhs);
860 tablenumber = int(std::floor(*i_tablenumber));
861 n = csound->TableLength(csound, tablenumber);
862 gmm::resize(lhs->vr, n);
863 return OK;
864 }
kontrol(CSOUND * csound)865 int kontrol(CSOUND *csound) {
866 for (int i = 0; i < n; ++i) {
867 lhs->vr[i] = csound->TableGet(csound, tablenumber, i);
868 }
869 return OK;
870 }
871 };
872
873 class la_k_assign_f_t : public OpcodeBase<la_k_assign_f_t> {
874 public:
875 MYFLT *i_vc;
876 PVSDAT *f_fsig;
877 la_i_vc_create_t *lhs;
878 int n;
879 std::complex<MYFLT> *f;
init(CSOUND * csound)880 int init(CSOUND *csound) {
881 toa(i_vc, lhs);
882 n = f_fsig->N;
883 // std::complex<MYFLT> has the same layout as CMPLX.
884 f = (std::complex<MYFLT> *)f_fsig->frame.auxp;
885 gmm::resize(lhs->vc, n);
886 return OK;
887 }
kontrol(CSOUND * csound)888 int kontrol(CSOUND *csound) {
889 for (int i = 0; i < n; ++i) {
890 lhs->vc[i] = f[i];
891 }
892 return OK;
893 }
894 };
895
896 class la_k_a_assign_t : public OpcodeBase<la_k_a_assign_t> {
897 public:
898 MYFLT *a_a;
899 MYFLT *i_vr;
900 la_i_vr_create_t *rhs;
901 size_t ksmps;
init(CSOUND * csound)902 int init(CSOUND *csound) {
903 toa(i_vr, rhs);
904 ksmps = opds.insdshead->ksmps;
905 return OK;
906 }
kontrol(CSOUND * csound)907 int kontrol(CSOUND *csound) {
908 uint32_t offset = opds.insdshead->ksmps_offset;
909 uint32_t early = opds.insdshead->ksmps_no_end;
910 memset(a_a, '\0', offset * sizeof(MYFLT));
911 size_t frameCount = opds.insdshead->kcounter * opds.insdshead->ksmps;
912 size_t vectorSize = gmm::vect_size(rhs->vr);
913 size_t array_i = frameCount % vectorSize;
914 if (UNLIKELY(early))
915 ksmps -= early;
916 for (size_t i = 0; i < ksmps; ++i, ++array_i) {
917 a_a[i] = rhs->vr[array_i];
918 }
919 return OK;
920 }
921 };
922
923 class la_i_t_assign_t : public OpcodeBase<la_i_t_assign_t> {
924 public:
925 MYFLT *i_tablenumber;
926 MYFLT *i_vr;
927 la_i_vr_create_t *rhs;
928 int tablenumber;
929 int n;
init(CSOUND * csound)930 int init(CSOUND *csound) {
931 toa(i_vr, rhs);
932 tablenumber = int(std::floor(*i_tablenumber));
933 n = csound->TableLength(csound, tablenumber);
934 gmm::resize(rhs->vr, n);
935 for (int i = 0; i < n; ++i) {
936 csound->TableSet(csound, tablenumber, i, rhs->vr[i]);
937 }
938 return OK;
939 }
940 };
941
942 class la_k_t_assign_t : public OpcodeBase<la_k_t_assign_t> {
943 public:
944 MYFLT *i_tablenumber;
945 MYFLT *i_vr;
946 la_i_vr_create_t *rhs;
947 int tablenumber;
948 int n;
init(CSOUND * csound)949 int init(CSOUND *csound) {
950 toa(i_vr, rhs);
951 tablenumber = int(std::floor(*i_tablenumber));
952 n = csound->TableLength(csound, tablenumber);
953 gmm::resize(rhs->vr, n);
954 return OK;
955 }
kontrol(CSOUND * csound)956 int kontrol(CSOUND *csound) {
957 for (int i = 0; i < n; ++i) {
958 csound->TableSet(csound, tablenumber, i, rhs->vr[i]);
959 }
960 return OK;
961 }
962 };
963
964 class la_k_f_assign_t : public OpcodeBase<la_k_f_assign_t> {
965 public:
966 PVSDAT *f_fsig;
967 MYFLT *i_vc;
968 la_i_vc_create_t *rhs;
969 int n;
970 std::complex<MYFLT> *f;
init(CSOUND * csound)971 int init(CSOUND *csound) {
972 toa(i_vc, rhs);
973 n = f_fsig->N;
974 // std::complex<MYFLT> has the same layout as CMPLX.
975 f = (std::complex<MYFLT> *)f_fsig->frame.auxp;
976 gmm::resize(rhs->vc, n);
977 return OK;
978 }
kontrol(CSOUND * csound)979 int kontrol(CSOUND *csound) {
980 for (int i = 0; i < n; ++i) {
981 f[i] = rhs->vc[i];
982 }
983 return OK;
984 }
985 };
986
987 class la_i_random_vr_t : public OpcodeBase<la_i_random_vr_t> {
988 public:
989 MYFLT *i_vr_lhs;
990 MYFLT *i_fraction;
991 la_i_vr_create_t *lhs;
init(CSOUND * csound)992 int init(CSOUND *csound) {
993 toa(i_vr_lhs, lhs);
994 gmm::fill_random(lhs->vr, *i_fraction);
995 return OK;
996 }
997 };
998
999 class la_k_random_vr_t : public OpcodeBase<la_k_random_vr_t> {
1000 public:
1001 MYFLT *i_vr_lhs;
1002 MYFLT *i_fraction;
1003 la_i_vr_create_t *lhs;
init(CSOUND * csound)1004 int init(CSOUND *csound) {
1005 toa(i_vr_lhs, lhs);
1006 return OK;
1007 }
kontrol(CSOUND * csound)1008 int kontrol(CSOUND *csound) {
1009 gmm::fill_random(lhs->vr, *i_fraction);
1010 return OK;
1011 }
1012 };
1013
1014 class la_i_random_vc_t : public OpcodeBase<la_i_random_vc_t> {
1015 public:
1016 MYFLT *i_vc_lhs;
1017 MYFLT *i_fraction;
1018 la_i_vc_create_t *lhs;
init(CSOUND * csound)1019 int init(CSOUND *csound) {
1020 toa(i_vc_lhs, lhs);
1021 gmm::fill_random(lhs->vc, *i_fraction);
1022 return OK;
1023 }
1024 };
1025
1026 class la_k_random_vc_t : public OpcodeBase<la_k_random_vc_t> {
1027 public:
1028 MYFLT *i_vc_lhs;
1029 MYFLT *i_fraction;
1030 la_i_vc_create_t *lhs;
init(CSOUND * csound)1031 int init(CSOUND *csound) {
1032 toa(i_vc_lhs, lhs);
1033 return OK;
1034 }
kontrol(CSOUND * csound)1035 int kontrol(CSOUND *csound) {
1036 gmm::fill_random(lhs->vc, *i_fraction);
1037 return OK;
1038 }
1039 };
1040
1041 class la_i_random_mr_t : public OpcodeBase<la_i_random_mr_t> {
1042 public:
1043 MYFLT *i_mr_lhs;
1044 MYFLT *i_fraction;
1045 la_i_mr_create_t *lhs;
init(CSOUND * csound)1046 int init(CSOUND *csound) {
1047 toa(i_mr_lhs, lhs);
1048 gmm::fill_random(lhs->mr, *i_fraction);
1049 return OK;
1050 }
1051 };
1052
1053 class la_k_random_mr_t : public OpcodeBase<la_k_random_mr_t> {
1054 public:
1055 MYFLT *i_mr_lhs;
1056 MYFLT *i_fraction;
1057 la_i_mr_create_t *lhs;
init(CSOUND * csound)1058 int init(CSOUND *csound) {
1059 toa(i_mr_lhs, lhs);
1060 return OK;
1061 }
kontrol(CSOUND * csound)1062 int kontrol(CSOUND *csound) {
1063 gmm::fill_random(lhs->mr, *i_fraction);
1064 return OK;
1065 }
1066 };
1067
1068 class la_i_random_mc_t : public OpcodeBase<la_i_random_mc_t> {
1069 public:
1070 MYFLT *i_mc_lhs;
1071 MYFLT *i_fraction;
1072 la_i_mc_create_t *lhs;
init(CSOUND * csound)1073 int init(CSOUND *csound) {
1074 toa(i_mc_lhs, lhs);
1075 gmm::fill_random(lhs->mc, *i_fraction);
1076 return OK;
1077 }
1078 };
1079
1080 class la_k_random_mc_t : public OpcodeBase<la_k_random_mc_t> {
1081 public:
1082 MYFLT *i_mc_lhs;
1083 MYFLT *i_fraction;
1084 la_i_mc_create_t *lhs;
init(CSOUND * csound)1085 int init(CSOUND *csound) {
1086 toa(i_mc_lhs, lhs);
1087 return OK;
1088 }
kontrol(CSOUND * csound)1089 int kontrol(CSOUND *csound) {
1090 gmm::fill_random(lhs->mc, *i_fraction);
1091 return OK;
1092 }
1093 };
1094
1095 class la_i_vr_set_t : public OpcodeBase<la_i_vr_set_t> {
1096 public:
1097 MYFLT *i_vr;
1098 MYFLT *i_row;
1099 MYFLT *i_value;
1100 la_i_vr_create_t *vr;
init(CSOUND *)1101 int init(CSOUND *) {
1102 toa(i_vr, vr);
1103 vr->vr[size_t(*i_row)] = *i_value;
1104 return OK;
1105 }
1106 };
1107
1108 class la_k_vr_set_t : public OpcodeBase<la_k_vr_set_t> {
1109 public:
1110 MYFLT *i_vr;
1111 MYFLT *k_row;
1112 MYFLT *k_value;
1113 la_i_vr_create_t *vr;
init(CSOUND *)1114 int init(CSOUND *) {
1115 toa(i_vr, vr);
1116 return OK;
1117 }
kontrol(CSOUND *)1118 int kontrol(CSOUND *) {
1119 vr->vr[size_t(*k_row)] = *k_value;
1120 return OK;
1121 }
1122 };
1123
1124 class la_i_vc_set_t : public OpcodeBase<la_i_vc_set_t> {
1125 public:
1126 MYFLT *i_vc;
1127 MYFLT *i_row;
1128 MYFLT *i_value_r;
1129 MYFLT *i_value_i;
1130 la_i_vc_create_t *vc;
init(CSOUND *)1131 int init(CSOUND *) {
1132 toa(i_vc, vc);
1133 vc->vc[size_t(*i_row)] = std::complex<MYFLT>(*i_value_r, *i_value_i);
1134 return OK;
1135 }
1136 };
1137
1138 class la_k_vc_set_t : public OpcodeBase<la_k_vc_set_t> {
1139 public:
1140 MYFLT *i_vc;
1141 MYFLT *k_row;
1142 MYFLT *k_value_r;
1143 MYFLT *k_value_i;
1144 la_i_vc_create_t *vc;
init(CSOUND *)1145 int init(CSOUND *) {
1146 toa(i_vc, vc);
1147 return OK;
1148 }
kontrol(CSOUND *)1149 int kontrol(CSOUND *) {
1150 vc->vc[size_t(*k_row)] = std::complex<MYFLT>(*k_value_r, *k_value_i);
1151 return OK;
1152 }
1153 };
1154
1155 class la_i_mr_set_t : public OpcodeBase<la_i_mr_set_t> {
1156 public:
1157 MYFLT *i_mr;
1158 MYFLT *i_row;
1159 MYFLT *i_column;
1160 MYFLT *i_value;
1161 la_i_mr_create_t *mr;
init(CSOUND *)1162 int init(CSOUND *) {
1163 toa(i_mr, mr);
1164 mr->mr(size_t(*i_row), size_t(*i_column)) = *i_value;
1165 return OK;
1166 }
1167 };
1168
1169 class la_k_mr_set_t : public OpcodeBase<la_k_mr_set_t> {
1170 public:
1171 MYFLT *i_mr;
1172 MYFLT *k_row;
1173 MYFLT *k_column;
1174 MYFLT *k_value;
1175 la_i_mr_create_t *mr;
init(CSOUND *)1176 int init(CSOUND *) {
1177 toa(i_mr, mr);
1178 return OK;
1179 }
kontrol(CSOUND *)1180 int kontrol(CSOUND *) {
1181 mr->mr(size_t(*k_row), size_t(*k_column)) = *k_value;
1182 return OK;
1183 }
1184 };
1185
1186 class la_i_mc_set_t : public OpcodeBase<la_i_mc_set_t> {
1187 public:
1188 MYFLT *i_mc;
1189 MYFLT *i_row;
1190 MYFLT *i_column;
1191 MYFLT *i_value_r;
1192 MYFLT *i_value_i;
1193 la_i_mc_create_t *mc;
init(CSOUND *)1194 int init(CSOUND *) {
1195 toa(i_mc, mc);
1196 mc->mc(size_t(*i_row), size_t(*i_column)) =
1197 std::complex<MYFLT>(*i_value_r, *i_value_i);
1198 return OK;
1199 }
1200 };
1201
1202 class la_k_mc_set_t : public OpcodeBase<la_k_mc_set_t> {
1203 public:
1204 MYFLT *i_mc;
1205 MYFLT *k_row;
1206 MYFLT *k_column;
1207 MYFLT *k_value_r;
1208 MYFLT *k_value_i;
1209 la_i_mc_create_t *mc;
init(CSOUND *)1210 int init(CSOUND *) {
1211 toa(i_mc, mc);
1212 return OK;
1213 }
kontrol(CSOUND *)1214 int kontrol(CSOUND *) {
1215 mc->mc(size_t(*k_row), size_t(*k_column)) =
1216 std::complex<MYFLT>(*k_value_r, *k_value_i);
1217 return OK;
1218 }
1219 };
1220
1221 class la_i_get_vr_t : public OpcodeBase<la_i_get_vr_t> {
1222 public:
1223 MYFLT *i_value;
1224 MYFLT *i_vr;
1225 MYFLT *i_row;
1226 la_i_vr_create_t *vr;
init(CSOUND *)1227 int init(CSOUND *) {
1228 toa(i_vr, vr);
1229 *i_value = vr->vr[size_t(*i_row)];
1230 return OK;
1231 }
1232 };
1233
1234 class la_k_get_vr_t : public OpcodeBase<la_k_get_vr_t> {
1235 public:
1236 MYFLT *k_value;
1237 MYFLT *i_vr;
1238 MYFLT *k_row;
1239 la_i_vr_create_t *vr;
init(CSOUND *)1240 int init(CSOUND *) {
1241 toa(i_vr, vr);
1242 return OK;
1243 }
kontrol(CSOUND *)1244 int kontrol(CSOUND *) {
1245 *k_value = vr->vr[size_t(*k_row)];
1246 return OK;
1247 }
1248 };
1249
1250 class la_i_get_vc_t : public OpcodeBase<la_i_get_vc_t> {
1251 public:
1252 MYFLT *i_value_r;
1253 MYFLT *i_value_i;
1254 MYFLT *i_vc;
1255 MYFLT *i_row;
1256 la_i_vc_create_t *vc;
init(CSOUND *)1257 int init(CSOUND *) {
1258 toa(i_vc, vc);
1259 const std::complex<MYFLT> &lhs = vc->vc[size_t(*i_row)];
1260 *i_value_r = lhs.real();
1261 *i_value_i = lhs.imag();
1262 return OK;
1263 }
1264 };
1265
1266 class la_k_get_vc_t : public OpcodeBase<la_k_get_vc_t> {
1267 public:
1268 MYFLT *k_value_r;
1269 MYFLT *k_value_i;
1270 MYFLT *i_vc;
1271 MYFLT *k_row;
1272 la_i_vc_create_t *vc;
init(CSOUND *)1273 int init(CSOUND *) {
1274 toa(i_vc, vc);
1275 return OK;
1276 }
kontrol(CSOUND *)1277 int kontrol(CSOUND *) {
1278 const std::complex<MYFLT> &lhs = vc->vc[size_t(*k_row)];
1279 *k_value_r = lhs.real();
1280 *k_value_i = lhs.imag();
1281 return OK;
1282 }
1283 };
1284
1285 class la_i_get_mr_t : public OpcodeBase<la_i_get_mr_t> {
1286 public:
1287 MYFLT *i_value;
1288 MYFLT *i_mr;
1289 MYFLT *i_row;
1290 MYFLT *i_column;
1291 la_i_mr_create_t *mr;
init(CSOUND *)1292 int init(CSOUND *) {
1293 toa(i_mr, mr);
1294 *i_value = mr->mr(size_t(*i_row), size_t(*i_column));
1295 return OK;
1296 }
1297 };
1298
1299 class la_k_get_mr_t : public OpcodeBase<la_k_get_mr_t> {
1300 public:
1301 MYFLT *k_value;
1302 MYFLT *i_mr;
1303 MYFLT *k_row;
1304 MYFLT *k_column;
1305 la_i_mr_create_t *mr;
init(CSOUND *)1306 int init(CSOUND *) {
1307 toa(i_mr, mr);
1308 return OK;
1309 }
kontrol(CSOUND *)1310 int kontrol(CSOUND *) {
1311 *k_value = mr->mr(size_t(*k_row), size_t(*k_column));
1312 return OK;
1313 }
1314 };
1315
1316 class la_i_get_mc_t : public OpcodeBase<la_i_get_mc_t> {
1317 public:
1318 MYFLT *i_value_r;
1319 MYFLT *i_value_i;
1320 MYFLT *i_mc;
1321 MYFLT *i_row;
1322 MYFLT *i_column;
1323 la_i_mc_create_t *mc;
init(CSOUND *)1324 int init(CSOUND *) {
1325 toa(i_mc, mc);
1326 const std::complex<MYFLT> &lhs = mc->mc(size_t(*i_row), size_t(*i_column));
1327 *i_value_r = lhs.real();
1328 *i_value_i = lhs.imag();
1329 return OK;
1330 }
1331 };
1332
1333 class la_k_get_mc_t : public OpcodeBase<la_k_get_mc_t> {
1334 public:
1335 MYFLT *k_value_r;
1336 MYFLT *k_value_i;
1337 MYFLT *i_mc;
1338 MYFLT *k_row;
1339 MYFLT *k_column;
1340 la_i_mc_create_t *mc;
init(CSOUND *)1341 int init(CSOUND *) {
1342 toa(i_mc, mc);
1343 return OK;
1344 }
kontrol(CSOUND *)1345 int kontrol(CSOUND *) {
1346 const std::complex<MYFLT> &lhs = mc->mc(size_t(*k_row), size_t(*k_column));
1347 *k_value_r = lhs.real();
1348 *k_value_i = lhs.imag();
1349 return OK;
1350 }
1351 };
1352
1353 class la_i_transpose_mr_t : public OpcodeBase<la_i_transpose_mr_t> {
1354 public:
1355 MYFLT *imr_lhs;
1356 MYFLT *imr_rhs;
1357 la_i_mr_create_t *lhs;
1358 la_i_mr_create_t *rhs;
init(CSOUND *)1359 int init(CSOUND *) {
1360 toa(imr_lhs, lhs);
1361 toa(imr_rhs, rhs);
1362 gmm::copy(gmm::transposed(rhs->mr), lhs->mr);
1363 return OK;
1364 }
1365 };
1366
1367 class la_k_transpose_mr_t : public OpcodeBase<la_k_transpose_mr_t> {
1368 public:
1369 MYFLT *imr_lhs;
1370 MYFLT *imr_rhs;
1371 la_i_mr_create_t *lhs;
1372 la_i_mr_create_t *rhs;
init(CSOUND *)1373 int init(CSOUND *) {
1374 toa(imr_lhs, lhs);
1375 toa(imr_rhs, rhs);
1376 return OK;
1377 }
kontrol(CSOUND *)1378 int kontrol(CSOUND *) {
1379 gmm::copy(gmm::transposed(rhs->mr), lhs->mr);
1380 return OK;
1381 }
1382 };
1383
1384 class la_i_transpose_mc_t : public OpcodeBase<la_i_transpose_mc_t> {
1385 public:
1386 MYFLT *imc_lhs;
1387 MYFLT *imc_rhs;
1388 la_i_mc_create_t *lhs;
1389 la_i_mc_create_t *rhs;
init(CSOUND *)1390 int init(CSOUND *) {
1391 toa(imc_lhs, lhs);
1392 toa(imc_rhs, rhs);
1393 gmm::copy(gmm::transposed(rhs->mc), lhs->mc);
1394 return OK;
1395 }
1396 };
1397
1398 class la_k_transpose_mc_t : public OpcodeBase<la_k_transpose_mc_t> {
1399 public:
1400 MYFLT *imc_lhs;
1401 MYFLT *imc_rhs;
1402 la_i_mc_create_t *lhs;
1403 la_i_mc_create_t *rhs;
init(CSOUND *)1404 int init(CSOUND *) {
1405 toa(imc_lhs, lhs);
1406 toa(imc_rhs, rhs);
1407 return OK;
1408 }
kontrol(CSOUND *)1409 int kontrol(CSOUND *) {
1410 gmm::copy(gmm::transposed(rhs->mc), lhs->mc);
1411 return OK;
1412 }
1413 };
1414
1415 class la_i_conjugate_vr_t : public OpcodeBase<la_i_conjugate_vr_t> {
1416 public:
1417 MYFLT *ivr_lhs;
1418 MYFLT *ivr_rhs;
1419 la_i_vr_create_t *lhs;
1420 la_i_vr_create_t *rhs;
init(CSOUND *)1421 int init(CSOUND *) {
1422 toa(ivr_lhs, lhs);
1423 toa(ivr_rhs, rhs);
1424 gmm::copy(gmm::conjugated(rhs->vr), lhs->vr);
1425 return OK;
1426 }
1427 };
1428
1429 class la_k_conjugate_vr_t : public OpcodeBase<la_k_conjugate_vr_t> {
1430 public:
1431 MYFLT *ivr_lhs;
1432 MYFLT *ivr_rhs;
1433 la_i_vr_create_t *lhs;
1434 la_i_vr_create_t *rhs;
init(CSOUND *)1435 int init(CSOUND *) {
1436 toa(ivr_lhs, lhs);
1437 toa(ivr_rhs, rhs);
1438 return OK;
1439 }
kontrol(CSOUND *)1440 int kontrol(CSOUND *) {
1441 gmm::copy(gmm::conjugated(rhs->vr), lhs->vr);
1442 return OK;
1443 }
1444 };
1445
1446 class la_i_conjugate_vc_t : public OpcodeBase<la_i_conjugate_vc_t> {
1447 public:
1448 MYFLT *ivc_lhs;
1449 MYFLT *ivc_rhs;
1450 la_i_vc_create_t *lhs;
1451 la_i_vc_create_t *rhs;
init(CSOUND *)1452 int init(CSOUND *) {
1453 toa(ivc_lhs, lhs);
1454 toa(ivc_rhs, rhs);
1455 gmm::copy(gmm::conjugated(rhs->vc), lhs->vc);
1456 return OK;
1457 }
1458 };
1459
1460 class la_k_conjugate_vc_t : public OpcodeBase<la_k_conjugate_vc_t> {
1461 public:
1462 MYFLT *ivc_lhs;
1463 MYFLT *ivc_rhs;
1464 la_i_vc_create_t *lhs;
1465 la_i_vc_create_t *rhs;
init(CSOUND *)1466 int init(CSOUND *) {
1467 toa(ivc_lhs, lhs);
1468 toa(ivc_rhs, rhs);
1469 return OK;
1470 }
kontrol(CSOUND *)1471 int kontrol(CSOUND *) {
1472 gmm::copy(gmm::conjugated(rhs->vc), lhs->vc);
1473 return OK;
1474 }
1475 };
1476
1477 class la_i_conjugate_mr_t : public OpcodeBase<la_i_conjugate_mr_t> {
1478 public:
1479 MYFLT *imr_lhs;
1480 MYFLT *imr_rhs;
1481 la_i_mr_create_t *lhs;
1482 la_i_mr_create_t *rhs;
init(CSOUND *)1483 int init(CSOUND *) {
1484 toa(imr_lhs, lhs);
1485 toa(imr_rhs, rhs);
1486 gmm::copy(gmm::conjugated(rhs->mr), lhs->mr);
1487 return OK;
1488 }
1489 };
1490
1491 class la_k_conjugate_mr_t : public OpcodeBase<la_k_conjugate_mr_t> {
1492 public:
1493 MYFLT *imr_lhs;
1494 MYFLT *imr_rhs;
1495 la_i_mr_create_t *lhs;
1496 la_i_mr_create_t *rhs;
init(CSOUND *)1497 int init(CSOUND *) {
1498 toa(imr_lhs, lhs);
1499 toa(imr_rhs, rhs);
1500 return OK;
1501 }
kontrol(CSOUND *)1502 int kontrol(CSOUND *) {
1503 gmm::copy(gmm::conjugated(rhs->mr), lhs->mr);
1504 return OK;
1505 }
1506 };
1507
1508 class la_i_conjugate_mc_t : public OpcodeBase<la_i_conjugate_mc_t> {
1509 public:
1510 MYFLT *imc_lhs;
1511 MYFLT *imc_rhs;
1512 la_i_mc_create_t *lhs;
1513 la_i_mc_create_t *rhs;
init(CSOUND *)1514 int init(CSOUND *) {
1515 toa(imc_lhs, lhs);
1516 toa(imc_rhs, rhs);
1517 gmm::copy(gmm::conjugated(rhs->mc), lhs->mc);
1518 return OK;
1519 }
1520 };
1521
1522 class la_k_conjugate_mc_t : public OpcodeBase<la_k_conjugate_mc_t> {
1523 public:
1524 MYFLT *imc_lhs;
1525 MYFLT *imc_rhs;
1526 la_i_mc_create_t *lhs;
1527 la_i_mc_create_t *rhs;
init(CSOUND *)1528 int init(CSOUND *) {
1529 toa(imc_lhs, lhs);
1530 toa(imc_rhs, rhs);
1531 return OK;
1532 }
kontrol(CSOUND *)1533 int kontrol(CSOUND *) {
1534 gmm::copy(gmm::conjugated(rhs->mc), lhs->mc);
1535 return OK;
1536 }
1537 };
1538
1539 class la_i_norm1_vr_t : public OpcodeBase<la_i_norm1_vr_t> {
1540 public:
1541 MYFLT *lhs;
1542 MYFLT *rhs_;
1543 la_i_vr_create_t *rhs;
init(CSOUND *)1544 int init(CSOUND *) {
1545 toa(rhs_, rhs);
1546 *lhs = gmm::vect_norm1(rhs->vr);
1547 return OK;
1548 }
1549 };
1550
1551 class la_k_norm1_vr_t : public OpcodeBase<la_k_norm1_vr_t> {
1552 public:
1553 MYFLT *lhs;
1554 MYFLT *rhs_;
1555 la_i_vr_create_t *rhs;
init(CSOUND *)1556 int init(CSOUND *) {
1557 toa(rhs_, rhs);
1558 return OK;
1559 }
kontrol(CSOUND *)1560 int kontrol(CSOUND *) {
1561 toa(rhs_, rhs);
1562 *lhs = gmm::vect_norm1(rhs->vr);
1563 return OK;
1564 }
1565 };
1566
1567 class la_i_norm1_vc_t : public OpcodeBase<la_i_norm1_vc_t> {
1568 public:
1569 MYFLT *lhs;
1570 MYFLT *rhs_;
1571 la_i_vc_create_t *rhs;
init(CSOUND *)1572 int init(CSOUND *) {
1573 toa(rhs_, rhs);
1574 *lhs = gmm::vect_norm1(rhs->vc);
1575 return OK;
1576 }
1577 };
1578
1579 class la_k_norm1_vc_t : public OpcodeBase<la_k_norm1_vc_t> {
1580 public:
1581 MYFLT *lhs;
1582 MYFLT *rhs_;
1583 la_i_vc_create_t *rhs;
init(CSOUND *)1584 int init(CSOUND *) {
1585 toa(rhs_, rhs);
1586 return OK;
1587 }
kontrol(CSOUND *)1588 int kontrol(CSOUND *) {
1589 toa(rhs_, rhs);
1590 *lhs = gmm::vect_norm1(rhs->vc);
1591 return OK;
1592 }
1593 };
1594
1595 class la_i_norm1_mr_t : public OpcodeBase<la_i_norm1_mr_t> {
1596 public:
1597 MYFLT *lhs;
1598 MYFLT *rhs_;
1599 la_i_mr_create_t *rhs;
init(CSOUND *)1600 int init(CSOUND *) {
1601 toa(rhs_, rhs);
1602 *lhs = gmm::mat_norm1(rhs->mr);
1603 return OK;
1604 }
1605 };
1606
1607 class la_k_norm1_mr_t : public OpcodeBase<la_k_norm1_mr_t> {
1608 public:
1609 MYFLT *lhs;
1610 MYFLT *rhs_;
1611 la_i_mr_create_t *rhs;
init(CSOUND *)1612 int init(CSOUND *) {
1613 toa(rhs_, rhs);
1614 return OK;
1615 }
kontrol(CSOUND *)1616 int kontrol(CSOUND *) {
1617 toa(rhs_, rhs);
1618 *lhs = gmm::mat_norm1(rhs->mr);
1619 return OK;
1620 }
1621 };
1622
1623 class la_i_norm1_mc_t : public OpcodeBase<la_i_norm1_mc_t> {
1624 public:
1625 MYFLT *lhs;
1626 MYFLT *rhs_;
1627 la_i_mc_create_t *rhs;
init(CSOUND *)1628 int init(CSOUND *) {
1629 toa(rhs_, rhs);
1630 *lhs = gmm::mat_norm1(rhs->mc);
1631 return OK;
1632 }
1633 };
1634
1635 class la_k_norm1_mc_t : public OpcodeBase<la_k_norm1_mc_t> {
1636 public:
1637 MYFLT *lhs;
1638 MYFLT *rhs_;
1639 la_i_mc_create_t *rhs;
init(CSOUND *)1640 int init(CSOUND *) {
1641 toa(rhs_, rhs);
1642 return OK;
1643 }
kontrol(CSOUND *)1644 int kontrol(CSOUND *) {
1645 toa(rhs_, rhs);
1646 *lhs = gmm::mat_norm1(rhs->mc);
1647 return OK;
1648 }
1649 };
1650
1651 class la_i_norm_euclid_vr_t : public OpcodeBase<la_i_norm_euclid_vr_t> {
1652 public:
1653 MYFLT *lhs;
1654 MYFLT *rhs_;
1655 la_i_vr_create_t *rhs;
init(CSOUND *)1656 int init(CSOUND *) {
1657 toa(rhs_, rhs);
1658 *lhs = gmm::vect_norm2(rhs->vr);
1659 return OK;
1660 }
1661 };
1662
1663 class la_k_norm_euclid_vr_t : public OpcodeBase<la_k_norm_euclid_vr_t> {
1664 public:
1665 MYFLT *lhs;
1666 MYFLT *rhs_;
1667 la_i_vr_create_t *rhs;
init(CSOUND *)1668 int init(CSOUND *) {
1669 toa(rhs_, rhs);
1670 return OK;
1671 }
kontrol(CSOUND *)1672 int kontrol(CSOUND *) {
1673 toa(rhs_, rhs);
1674 *lhs = gmm::vect_norm2(rhs->vr);
1675 return OK;
1676 }
1677 };
1678
1679 class la_i_norm_euclid_vc_t : public OpcodeBase<la_i_norm_euclid_vc_t> {
1680 public:
1681 MYFLT *lhs;
1682 MYFLT *rhs_;
1683 la_i_vc_create_t *rhs;
init(CSOUND *)1684 int init(CSOUND *) {
1685 toa(rhs_, rhs);
1686 *lhs = gmm::vect_norm2(rhs->vc);
1687 return OK;
1688 }
1689 };
1690
1691 class la_k_norm_euclid_vc_t : public OpcodeBase<la_k_norm_euclid_vc_t> {
1692 public:
1693 MYFLT *lhs;
1694 MYFLT *rhs_;
1695 la_i_vc_create_t *rhs;
init(CSOUND *)1696 int init(CSOUND *) {
1697 toa(rhs_, rhs);
1698 return OK;
1699 }
kontrol(CSOUND *)1700 int kontrol(CSOUND *) {
1701 toa(rhs_, rhs);
1702 *lhs = gmm::vect_norm2(rhs->vc);
1703 return OK;
1704 }
1705 };
1706
1707 class la_i_norm_euclid_mr_t : public OpcodeBase<la_i_norm_euclid_mr_t> {
1708 public:
1709 MYFLT *lhs;
1710 MYFLT *rhs_;
1711 la_i_mr_create_t *rhs;
init(CSOUND *)1712 int init(CSOUND *) {
1713 toa(rhs_, rhs);
1714 *lhs = gmm::mat_euclidean_norm(rhs->mr);
1715 return OK;
1716 }
1717 };
1718
1719 class la_k_norm_euclid_mr_t : public OpcodeBase<la_k_norm_euclid_mr_t> {
1720 public:
1721 MYFLT *lhs;
1722 MYFLT *rhs_;
1723 la_i_mr_create_t *rhs;
init(CSOUND *)1724 int init(CSOUND *) {
1725 toa(rhs_, rhs);
1726 return OK;
1727 }
kontrol(CSOUND *)1728 int kontrol(CSOUND *) {
1729 toa(rhs_, rhs);
1730 *lhs = gmm::mat_euclidean_norm(rhs->mr);
1731 return OK;
1732 }
1733 };
1734
1735 class la_i_norm_euclid_mc_t : public OpcodeBase<la_i_norm_euclid_mc_t> {
1736 public:
1737 MYFLT *lhs;
1738 MYFLT *rhs_;
1739 la_i_mc_create_t *rhs;
init(CSOUND *)1740 int init(CSOUND *) {
1741 toa(rhs_, rhs);
1742 *lhs = gmm::mat_euclidean_norm(rhs->mc);
1743 return OK;
1744 }
1745 };
1746
1747 class la_k_norm_euclid_mc_t : public OpcodeBase<la_k_norm_euclid_mc_t> {
1748 public:
1749 MYFLT *lhs;
1750 MYFLT *rhs_;
1751 la_i_mc_create_t *rhs;
init(CSOUND *)1752 int init(CSOUND *) {
1753 toa(rhs_, rhs);
1754 return OK;
1755 }
kontrol(CSOUND *)1756 int kontrol(CSOUND *) {
1757 toa(rhs_, rhs);
1758 *lhs = gmm::mat_euclidean_norm(rhs->mc);
1759 return OK;
1760 }
1761 };
1762
1763 class la_i_distance_vr_t : public OpcodeBase<la_i_distance_vr_t> {
1764 public:
1765 MYFLT *lhs;
1766 MYFLT *rhs_1_;
1767 MYFLT *rhs_2_;
1768 la_i_vr_create_t *rhs_1;
1769 la_i_vr_create_t *rhs_2;
init(CSOUND *)1770 int init(CSOUND *) {
1771 toa(rhs_1_, rhs_1);
1772 toa(rhs_2_, rhs_2);
1773 *lhs = gmm::vect_dist2(rhs_1->vr, rhs_2->vr);
1774 return OK;
1775 }
1776 };
1777
1778 class la_k_distance_vr_t : public OpcodeBase<la_k_distance_vr_t> {
1779 public:
1780 MYFLT *lhs;
1781 MYFLT *rhs_1_;
1782 MYFLT *rhs_2_;
1783 la_i_vr_create_t *rhs_1;
1784 la_i_vr_create_t *rhs_2;
init(CSOUND *)1785 int init(CSOUND *) {
1786 toa(rhs_1_, rhs_1);
1787 toa(rhs_2_, rhs_2);
1788 return OK;
1789 }
kontrol(CSOUND *)1790 int kontrol(CSOUND *) {
1791 *lhs = gmm::vect_dist2(rhs_1->vr, rhs_2->vr);
1792 return OK;
1793 }
1794 };
1795
1796 class la_i_distance_vc_t : public OpcodeBase<la_i_distance_vc_t> {
1797 public:
1798 MYFLT *lhs;
1799 MYFLT *rhs_1_;
1800 MYFLT *rhs_2_;
1801 la_i_vc_create_t *rhs_1;
1802 la_i_vc_create_t *rhs_2;
init(CSOUND *)1803 int init(CSOUND *) {
1804 toa(rhs_1_, rhs_1);
1805 toa(rhs_2_, rhs_2);
1806 *lhs = gmm::vect_dist2(rhs_1->vc, rhs_2->vc);
1807 return OK;
1808 }
1809 };
1810
1811 class la_k_distance_vc_t : public OpcodeBase<la_k_distance_vc_t> {
1812 public:
1813 MYFLT *lhs;
1814 MYFLT *rhs_1_;
1815 MYFLT *rhs_2_;
1816 la_i_vc_create_t *rhs_1;
1817 la_i_vc_create_t *rhs_2;
init(CSOUND *)1818 int init(CSOUND *) {
1819 toa(rhs_1_, rhs_1);
1820 toa(rhs_2_, rhs_2);
1821 return OK;
1822 }
kontrol(CSOUND *)1823 int kontrol(CSOUND *) {
1824 *lhs = gmm::vect_dist2(rhs_1->vc, rhs_2->vc);
1825 return OK;
1826 }
1827 };
1828
1829 class la_i_norm_max_mr_t : public OpcodeBase<la_i_norm_max_mr_t> {
1830 public:
1831 MYFLT *lhs;
1832 MYFLT *rhs_;
1833 la_i_mr_create_t *rhs;
init(CSOUND *)1834 int init(CSOUND *) {
1835 toa(rhs_, rhs);
1836 *lhs = gmm::mat_maxnorm(rhs->mr);
1837 return OK;
1838 }
1839 };
1840
1841 class la_k_norm_max_mr_t : public OpcodeBase<la_k_norm_max_mr_t> {
1842 public:
1843 MYFLT *lhs;
1844 MYFLT *rhs_;
1845 la_i_mr_create_t *rhs;
init(CSOUND *)1846 int init(CSOUND *) {
1847 toa(rhs_, rhs);
1848 return OK;
1849 }
kontrol(CSOUND *)1850 int kontrol(CSOUND *) {
1851 toa(rhs_, rhs);
1852 *lhs = gmm::mat_maxnorm(rhs->mr);
1853 return OK;
1854 }
1855 };
1856
1857 class la_i_norm_max_mc_t : public OpcodeBase<la_i_norm_max_mc_t> {
1858 public:
1859 MYFLT *lhs;
1860 MYFLT *rhs_;
1861 la_i_mc_create_t *rhs;
init(CSOUND *)1862 int init(CSOUND *) {
1863 toa(rhs_, rhs);
1864 *lhs = gmm::mat_maxnorm(rhs->mc);
1865 return OK;
1866 }
1867 };
1868
1869 class la_k_norm_max_mc_t : public OpcodeBase<la_k_norm_max_mc_t> {
1870 public:
1871 MYFLT *lhs;
1872 MYFLT *rhs_;
1873 la_i_mc_create_t *rhs;
init(CSOUND *)1874 int init(CSOUND *) {
1875 toa(rhs_, rhs);
1876 return OK;
1877 }
kontrol(CSOUND *)1878 int kontrol(CSOUND *) {
1879 toa(rhs_, rhs);
1880 *lhs = gmm::mat_maxnorm(rhs->mc);
1881 return OK;
1882 }
1883 };
1884
1885 class la_i_norm_inf_vr_t : public OpcodeBase<la_i_norm_inf_vr_t> {
1886 public:
1887 MYFLT *lhs;
1888 MYFLT *rhs_;
1889 la_i_vr_create_t *rhs;
init(CSOUND *)1890 int init(CSOUND *) {
1891 toa(rhs_, rhs);
1892 *lhs = gmm::vect_norminf(rhs->vr);
1893 return OK;
1894 }
1895 };
1896
1897 class la_k_norm_inf_vr_t : public OpcodeBase<la_k_norm_inf_vr_t> {
1898 public:
1899 MYFLT *lhs;
1900 MYFLT *rhs_;
1901 la_i_vr_create_t *rhs;
init(CSOUND *)1902 int init(CSOUND *) {
1903 toa(rhs_, rhs);
1904 return OK;
1905 }
kontrol(CSOUND *)1906 int kontrol(CSOUND *) {
1907 toa(rhs_, rhs);
1908 *lhs = gmm::vect_norminf(rhs->vr);
1909 return OK;
1910 }
1911 };
1912
1913 class la_i_norm_inf_vc_t : public OpcodeBase<la_i_norm_inf_vc_t> {
1914 public:
1915 MYFLT *lhs;
1916 MYFLT *rhs_;
1917 la_i_vc_create_t *rhs;
init(CSOUND *)1918 int init(CSOUND *) {
1919 toa(rhs_, rhs);
1920 *lhs = gmm::vect_norminf(rhs->vc);
1921 return OK;
1922 }
1923 };
1924
1925 class la_k_norm_inf_vc_t : public OpcodeBase<la_k_norm_inf_vc_t> {
1926 public:
1927 MYFLT *lhs;
1928 MYFLT *rhs_;
1929 la_i_vc_create_t *rhs;
init(CSOUND *)1930 int init(CSOUND *) {
1931 toa(rhs_, rhs);
1932 return OK;
1933 }
kontrol(CSOUND *)1934 int kontrol(CSOUND *) {
1935 toa(rhs_, rhs);
1936 *lhs = gmm::vect_norminf(rhs->vc);
1937 return OK;
1938 }
1939 };
1940
1941 class la_i_norm_inf_mr_t : public OpcodeBase<la_i_norm_inf_mr_t> {
1942 public:
1943 MYFLT *lhs;
1944 MYFLT *rhs_;
1945 la_i_mr_create_t *rhs;
init(CSOUND *)1946 int init(CSOUND *) {
1947 toa(rhs_, rhs);
1948 *lhs = gmm::mat_norminf(rhs->mr);
1949 return OK;
1950 }
1951 };
1952
1953 class la_k_norm_inf_mr_t : public OpcodeBase<la_k_norm_inf_mr_t> {
1954 public:
1955 MYFLT *lhs;
1956 MYFLT *rhs_;
1957 la_i_mr_create_t *rhs;
init(CSOUND *)1958 int init(CSOUND *) {
1959 toa(rhs_, rhs);
1960 return OK;
1961 }
kontrol(CSOUND *)1962 int kontrol(CSOUND *) {
1963 toa(rhs_, rhs);
1964 *lhs = gmm::mat_norminf(rhs->mr);
1965 return OK;
1966 }
1967 };
1968
1969 class la_i_norm_inf_mc_t : public OpcodeBase<la_i_norm_inf_mc_t> {
1970 public:
1971 MYFLT *lhs;
1972 MYFLT *rhs_;
1973 la_i_mc_create_t *rhs;
init(CSOUND *)1974 int init(CSOUND *) {
1975 toa(rhs_, rhs);
1976 *lhs = gmm::mat_norminf(rhs->mc);
1977 return OK;
1978 }
1979 };
1980
1981 class la_k_norm_inf_mc_t : public OpcodeBase<la_k_norm_inf_mc_t> {
1982 public:
1983 MYFLT *lhs;
1984 MYFLT *rhs_;
1985 la_i_mc_create_t *rhs;
init(CSOUND *)1986 int init(CSOUND *) {
1987 toa(rhs_, rhs);
1988 return OK;
1989 }
kontrol(CSOUND *)1990 int kontrol(CSOUND *) {
1991 toa(rhs_, rhs);
1992 *lhs = gmm::mat_norminf(rhs->mc);
1993 return OK;
1994 }
1995 };
1996
1997 class la_i_trace_mr_t : public OpcodeBase<la_i_trace_mr_t> {
1998 public:
1999 MYFLT *lhs;
2000 MYFLT *rhs_;
2001 la_i_mr_create_t *rhs;
init(CSOUND *)2002 int init(CSOUND *) {
2003 toa(rhs_, rhs);
2004 *lhs = gmm::mat_trace(rhs->mr);
2005 return OK;
2006 }
2007 };
2008
2009 class la_k_trace_mr_t : public OpcodeBase<la_k_trace_mr_t> {
2010 public:
2011 MYFLT *lhs;
2012 MYFLT *rhs_;
2013 la_i_mr_create_t *rhs;
init(CSOUND *)2014 int init(CSOUND *) {
2015 toa(rhs_, rhs);
2016 return OK;
2017 }
kontrol(CSOUND *)2018 int kontrol(CSOUND *) {
2019 toa(rhs_, rhs);
2020 *lhs = gmm::mat_trace(rhs->mr);
2021 return OK;
2022 }
2023 };
2024
2025 class la_i_trace_mc_t : public OpcodeBase<la_i_trace_mc_t> {
2026 public:
2027 MYFLT *lhs_r;
2028 MYFLT *lhs_i;
2029 MYFLT *rhs_;
2030 la_i_mc_create_t *rhs;
init(CSOUND *)2031 int init(CSOUND *) {
2032 toa(rhs_, rhs);
2033 const std::complex<MYFLT> &lhs = gmm::mat_trace(rhs->mc);
2034 *lhs_r = lhs.real();
2035 *lhs_i = lhs.imag();
2036 return OK;
2037 }
2038 };
2039
2040 class la_k_trace_mc_t : public OpcodeBase<la_k_trace_mc_t> {
2041 public:
2042 MYFLT *lhs_r;
2043 MYFLT *lhs_i;
2044 MYFLT *rhs_;
2045 la_i_mc_create_t *rhs;
init(CSOUND *)2046 int init(CSOUND *) {
2047 toa(rhs_, rhs);
2048 return OK;
2049 }
kontrol(CSOUND *)2050 int kontrol(CSOUND *) {
2051 toa(rhs_, rhs);
2052 const std::complex<MYFLT> &lhs = gmm::mat_trace(rhs->mc);
2053 *lhs_r = lhs.real();
2054 *lhs_i = lhs.imag();
2055 return OK;
2056 }
2057 };
2058
2059 class la_i_lu_det_mr_t : public OpcodeBase<la_i_lu_det_mr_t> {
2060 public:
2061 MYFLT *lhs;
2062 MYFLT *rhs_;
2063 la_i_mr_create_t *rhs;
init(CSOUND *)2064 int init(CSOUND *) {
2065 toa(rhs_, rhs);
2066 *lhs = gmm::lu_det(rhs->mr);
2067 return OK;
2068 }
2069 };
2070
2071 class la_k_lu_det_mr_t : public OpcodeBase<la_k_lu_det_mr_t> {
2072 public:
2073 MYFLT *lhs;
2074 MYFLT *rhs_;
2075 la_i_mr_create_t *rhs;
init(CSOUND *)2076 int init(CSOUND *) {
2077 toa(rhs_, rhs);
2078 return OK;
2079 }
kontrol(CSOUND *)2080 int kontrol(CSOUND *) {
2081 toa(rhs_, rhs);
2082 *lhs = gmm::lu_det(rhs->mr);
2083 return OK;
2084 }
2085 };
2086
2087 class la_i_lu_det_mc_t : public OpcodeBase<la_i_lu_det_mc_t> {
2088 public:
2089 MYFLT *lhs_r;
2090 MYFLT *lhs_i;
2091 MYFLT *rhs_;
2092 la_i_mc_create_t *rhs;
init(CSOUND *)2093 int init(CSOUND *) {
2094 toa(rhs_, rhs);
2095 const std::complex<MYFLT> &lhs = gmm::lu_det(rhs->mc);
2096 *lhs_r = lhs.real();
2097 *lhs_i = lhs.imag();
2098 return OK;
2099 }
2100 };
2101
2102 class la_k_lu_det_mc_t : public OpcodeBase<la_k_lu_det_mc_t> {
2103 public:
2104 MYFLT *lhs_r;
2105 MYFLT *lhs_i;
2106 MYFLT *rhs_;
2107 la_i_mc_create_t *rhs;
init(CSOUND *)2108 int init(CSOUND *) {
2109 toa(rhs_, rhs);
2110 return OK;
2111 }
kontrol(CSOUND *)2112 int kontrol(CSOUND *) {
2113 toa(rhs_, rhs);
2114 const std::complex<MYFLT> &lhs = gmm::lu_det(rhs->mc);
2115 *lhs_r = lhs.real();
2116 *lhs_i = lhs.imag();
2117 return OK;
2118 }
2119 };
2120
2121 /**
2122 * Elementwise addition.
2123 * The array on the left-hand side can also appear
2124 * on the right-hand side in order to perform a += b.
2125 */
2126 class la_i_add_vr_t : public OpcodeBase<la_i_add_vr_t> {
2127 public:
2128 MYFLT *lhs_;
2129 MYFLT *rhs_a_;
2130 MYFLT *rhs_b_;
2131 la_i_vr_create_t *lhs;
2132 la_i_vr_create_t *rhs_a;
2133 la_i_vr_create_t *rhs_b;
init(CSOUND *)2134 int init(CSOUND *) {
2135 toa(lhs_, lhs);
2136 toa(rhs_a_, rhs_a);
2137 toa(rhs_b_, rhs_b);
2138 for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2139 lhs->vr[i] = rhs_a->vr[i] + rhs_b->vr[i];
2140 }
2141 return OK;
2142 }
2143 };
2144
2145 /**
2146 * Elementwise addition.
2147 * The array on the left-hand side can also appear
2148 * on the right-hand side in order to perform a += b.
2149 */
2150 class la_k_add_vr_t : public OpcodeBase<la_k_add_vr_t> {
2151 public:
2152 MYFLT *lhs_;
2153 MYFLT *rhs_a_;
2154 MYFLT *rhs_b_;
2155 la_i_vr_create_t *lhs;
2156 la_i_vr_create_t *rhs_a;
2157 la_i_vr_create_t *rhs_b;
init(CSOUND *)2158 int init(CSOUND *) {
2159 toa(lhs_, lhs);
2160 toa(rhs_a_, rhs_a);
2161 toa(rhs_b_, rhs_b);
2162 return OK;
2163 }
kontrol(CSOUND *)2164 int kontrol(CSOUND *) {
2165 for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2166 lhs->vr[i] = rhs_a->vr[i] + rhs_b->vr[i];
2167 }
2168 return OK;
2169 }
2170 };
2171
2172 /**
2173 * Elementwise addition.
2174 * The array on the left-hand side can also appear
2175 * on the right-hand side in order to perform a += b.
2176 */
2177 class la_i_add_vc_t : public OpcodeBase<la_i_add_vc_t> {
2178 public:
2179 MYFLT *lhs_;
2180 MYFLT *rhs_a_;
2181 MYFLT *rhs_b_;
2182 la_i_vc_create_t *lhs;
2183 la_i_vc_create_t *rhs_a;
2184 la_i_vc_create_t *rhs_b;
init(CSOUND *)2185 int init(CSOUND *) {
2186 toa(lhs_, lhs);
2187 toa(rhs_a_, rhs_a);
2188 toa(rhs_b_, rhs_b);
2189 for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2190 lhs->vc[i] = rhs_a->vc[i] + rhs_b->vc[i];
2191 }
2192 return OK;
2193 }
2194 };
2195
2196 /**
2197 * Elementwise addition.
2198 * The array on the left-hand side can also appear
2199 * on the right-hand side in order to perform a += b.
2200 */
2201 class la_k_add_vc_t : public OpcodeBase<la_k_add_vc_t> {
2202 public:
2203 MYFLT *lhs_;
2204 MYFLT *rhs_a_;
2205 MYFLT *rhs_b_;
2206 la_i_vc_create_t *lhs;
2207 la_i_vc_create_t *rhs_a;
2208 la_i_vc_create_t *rhs_b;
init(CSOUND *)2209 int init(CSOUND *) {
2210 toa(lhs_, lhs);
2211 toa(rhs_a_, rhs_a);
2212 toa(rhs_b_, rhs_b);
2213 return OK;
2214 }
kontrol(CSOUND *)2215 int kontrol(CSOUND *) {
2216 for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2217 lhs->vc[i] = rhs_a->vc[i] + rhs_b->vc[i];
2218 }
2219 return OK;
2220 }
2221 };
2222
2223 /**
2224 * Elementwise addition.
2225 * The array on the left-hand side can also appear
2226 * on the right-hand side in order to perform A += B.
2227 */
2228 class la_i_add_mr_t : public OpcodeBase<la_i_add_mr_t> {
2229 public:
2230 MYFLT *lhs_;
2231 MYFLT *rhs_a_;
2232 MYFLT *rhs_b_;
2233 la_i_mr_create_t *lhs;
2234 la_i_mr_create_t *rhs_a;
2235 la_i_mr_create_t *rhs_b;
init(CSOUND *)2236 int init(CSOUND *) {
2237 toa(lhs_, lhs);
2238 toa(rhs_a_, rhs_a);
2239 toa(rhs_b_, rhs_b);
2240 size_t rowN = gmm::mat_nrows(rhs_a->mr);
2241 size_t columnN = gmm::mat_ncols(rhs_a->mr);
2242 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2243 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2244 lhs->mr(rowI, columnI) =
2245 rhs_a->mr(rowI, columnI) + rhs_b->mr(rowI, columnI);
2246 }
2247 }
2248 return OK;
2249 }
2250 };
2251
2252 /**
2253 * Elementwise addition.
2254 * The array on the left-hand side can also appear
2255 * on the right-hand side in order to perform A += B.
2256 */
2257 class la_k_add_mr_t : public OpcodeBase<la_k_add_mr_t> {
2258 public:
2259 MYFLT *lhs_;
2260 MYFLT *rhs_a_;
2261 MYFLT *rhs_b_;
2262 la_i_mr_create_t *lhs;
2263 la_i_mr_create_t *rhs_a;
2264 la_i_mr_create_t *rhs_b;
2265 size_t rowN;
2266 size_t columnN;
init(CSOUND *)2267 int init(CSOUND *) {
2268 toa(lhs_, lhs);
2269 toa(rhs_a_, rhs_a);
2270 toa(rhs_b_, rhs_b);
2271 rowN = gmm::mat_nrows(rhs_a->mr);
2272 columnN = gmm::mat_ncols(rhs_a->mr);
2273 return OK;
2274 }
kontrol(CSOUND *)2275 int kontrol(CSOUND *) {
2276 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2277 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2278 lhs->mr(rowI, columnI) =
2279 rhs_a->mr(rowI, columnI) + rhs_b->mr(rowI, columnI);
2280 }
2281 }
2282 return OK;
2283 }
2284 };
2285
2286 /**
2287 * Elementwise addition.
2288 * The array on the left-hand side can also appear
2289 * on the right-hand side in order to perform A += B.
2290 */
2291 class la_i_add_mc_t : public OpcodeBase<la_i_add_mc_t> {
2292 public:
2293 MYFLT *lhs_;
2294 MYFLT *rhs_a_;
2295 MYFLT *rhs_b_;
2296 la_i_mc_create_t *lhs;
2297 la_i_mc_create_t *rhs_a;
2298 la_i_mc_create_t *rhs_b;
init(CSOUND *)2299 int init(CSOUND *) {
2300 toa(lhs_, lhs);
2301 toa(rhs_a_, rhs_a);
2302 toa(rhs_b_, rhs_b);
2303 size_t rowN = gmm::mat_nrows(rhs_a->mc);
2304 size_t columnN = gmm::mat_ncols(rhs_a->mc);
2305 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2306 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2307 lhs->mc(rowI, columnI) =
2308 rhs_a->mc(rowI, columnI) + rhs_b->mc(rowI, columnI);
2309 }
2310 }
2311 return OK;
2312 }
2313 };
2314
2315 /**
2316 * Elementwise addition.
2317 * The array on the left-hand side can also appear
2318 * on the right-hand side in order to perform A += B.
2319 */
2320 class la_k_add_mc_t : public OpcodeBase<la_k_add_vc_t> {
2321 public:
2322 MYFLT *lhs_;
2323 MYFLT *rhs_a_;
2324 MYFLT *rhs_b_;
2325 la_i_mc_create_t *lhs;
2326 la_i_mc_create_t *rhs_a;
2327 la_i_mc_create_t *rhs_b;
2328 size_t rowN;
2329 size_t columnN;
init(CSOUND *)2330 int init(CSOUND *) {
2331 toa(lhs_, lhs);
2332 toa(rhs_a_, rhs_a);
2333 toa(rhs_b_, rhs_b);
2334 rowN = gmm::mat_nrows(rhs_a->mc);
2335 columnN = gmm::mat_ncols(rhs_a->mc);
2336 return OK;
2337 }
kontrol(CSOUND *)2338 int kontrol(CSOUND *) {
2339 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2340 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2341 lhs->mc(rowI, columnI) =
2342 rhs_a->mc(rowI, columnI) + rhs_b->mc(rowI, columnI);
2343 }
2344 }
2345 return OK;
2346 }
2347 };
2348
2349 /**
2350 * Elementwise subtraction.
2351 * The array on the left-hand side can also appear
2352 * on the right-hand side in order to perform a -= b.
2353 */
2354 class la_i_subtract_vr_t : public OpcodeBase<la_i_subtract_vr_t> {
2355 public:
2356 MYFLT *lhs_;
2357 MYFLT *rhs_a_;
2358 MYFLT *rhs_b_;
2359 la_i_vr_create_t *lhs;
2360 la_i_vr_create_t *rhs_a;
2361 la_i_vr_create_t *rhs_b;
init(CSOUND *)2362 int init(CSOUND *) {
2363 toa(lhs_, lhs);
2364 toa(rhs_a_, rhs_a);
2365 toa(rhs_b_, rhs_b);
2366 for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2367 lhs->vr[i] = rhs_a->vr[i] - rhs_b->vr[i];
2368 }
2369 return OK;
2370 }
2371 };
2372
2373 /**
2374 * Elementwise subtraction.
2375 * The array on the left-hand side can also appear
2376 * on the right-hand side in order to perform a -= b.
2377 */
2378 class la_k_subtract_vr_t : public OpcodeBase<la_k_subtract_vr_t> {
2379 public:
2380 MYFLT *lhs_;
2381 MYFLT *rhs_a_;
2382 MYFLT *rhs_b_;
2383 la_i_vr_create_t *lhs;
2384 la_i_vr_create_t *rhs_a;
2385 la_i_vr_create_t *rhs_b;
init(CSOUND *)2386 int init(CSOUND *) {
2387 toa(lhs_, lhs);
2388 toa(rhs_a_, rhs_a);
2389 toa(rhs_b_, rhs_b);
2390 return OK;
2391 }
kontrol(CSOUND *)2392 int kontrol(CSOUND *) {
2393 for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2394 lhs->vr[i] = rhs_a->vr[i] - rhs_b->vr[i];
2395 }
2396 return OK;
2397 }
2398 };
2399
2400 /**
2401 * Elementwise subtraction.
2402 * The array on the left-hand side can also appear
2403 * on the right-hand side in order to perform a -= b.
2404 */
2405 class la_i_subtract_vc_t : public OpcodeBase<la_i_subtract_vc_t> {
2406 public:
2407 MYFLT *lhs_;
2408 MYFLT *rhs_a_;
2409 MYFLT *rhs_b_;
2410 la_i_vc_create_t *lhs;
2411 la_i_vc_create_t *rhs_a;
2412 la_i_vc_create_t *rhs_b;
init(CSOUND *)2413 int init(CSOUND *) {
2414 toa(lhs_, lhs);
2415 toa(rhs_a_, rhs_a);
2416 toa(rhs_b_, rhs_b);
2417 for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2418 lhs->vc[i] = rhs_a->vc[i] - rhs_b->vc[i];
2419 }
2420 return OK;
2421 }
2422 };
2423
2424 /**
2425 * Elementwise subtraction.
2426 * The array on the left-hand side can also appear
2427 * on the right-hand side in order to perform a -= b.
2428 */
2429 class la_k_subtract_vc_t : public OpcodeBase<la_k_subtract_vc_t> {
2430 public:
2431 MYFLT *lhs_;
2432 MYFLT *rhs_a_;
2433 MYFLT *rhs_b_;
2434 la_i_vc_create_t *lhs;
2435 la_i_vc_create_t *rhs_a;
2436 la_i_vc_create_t *rhs_b;
init(CSOUND *)2437 int init(CSOUND *) {
2438 toa(lhs_, lhs);
2439 toa(rhs_a_, rhs_a);
2440 toa(rhs_b_, rhs_b);
2441 return OK;
2442 }
kontrol(CSOUND *)2443 int kontrol(CSOUND *) {
2444 for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2445 lhs->vc[i] = rhs_a->vc[i] - rhs_b->vc[i];
2446 }
2447 return OK;
2448 }
2449 };
2450
2451 /**
2452 * Elementwise subtraction.
2453 * The array on the left-hand side can also appear
2454 * on the right-hand side in order to perform A -= B.
2455 */
2456 class la_i_subtract_mr_t : public OpcodeBase<la_i_subtract_mr_t> {
2457 public:
2458 MYFLT *lhs_;
2459 MYFLT *rhs_a_;
2460 MYFLT *rhs_b_;
2461 la_i_mr_create_t *lhs;
2462 la_i_mr_create_t *rhs_a;
2463 la_i_mr_create_t *rhs_b;
init(CSOUND *)2464 int init(CSOUND *) {
2465 toa(lhs_, lhs);
2466 toa(rhs_a_, rhs_a);
2467 toa(rhs_b_, rhs_b);
2468 size_t rowN = gmm::mat_nrows(rhs_a->mr);
2469 size_t columnN = gmm::mat_ncols(rhs_a->mr);
2470 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2471 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2472 lhs->mr(rowI, columnI) =
2473 rhs_a->mr(rowI, columnI) - rhs_b->mr(rowI, columnI);
2474 }
2475 }
2476 return OK;
2477 }
2478 };
2479
2480 /**
2481 * Elementwise subtraction.
2482 * The array on the left-hand side can also appear
2483 * on the right-hand side in order to perform A -= B.
2484 */
2485 class la_k_subtract_mr_t : public OpcodeBase<la_k_subtract_mr_t> {
2486 public:
2487 MYFLT *lhs_;
2488 MYFLT *rhs_a_;
2489 MYFLT *rhs_b_;
2490 la_i_mr_create_t *lhs;
2491 la_i_mr_create_t *rhs_a;
2492 la_i_mr_create_t *rhs_b;
2493 size_t rowN;
2494 size_t columnN;
init(CSOUND *)2495 int init(CSOUND *) {
2496 toa(lhs_, lhs);
2497 toa(rhs_a_, rhs_a);
2498 toa(rhs_b_, rhs_b);
2499 rowN = gmm::mat_nrows(rhs_a->mr);
2500 columnN = gmm::mat_ncols(rhs_a->mr);
2501 return OK;
2502 }
kontrol(CSOUND *)2503 int kontrol(CSOUND *) {
2504 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2505 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2506 lhs->mr(rowI, columnI) =
2507 rhs_a->mr(rowI, columnI) - rhs_b->mr(rowI, columnI);
2508 }
2509 }
2510 return OK;
2511 }
2512 };
2513
2514 /**
2515 * Elementwise subtraction.
2516 * The array on the left-hand side can also appear
2517 * on the right-hand side in order to perform A -= B.
2518 */
2519 class la_i_subtract_mc_t : public OpcodeBase<la_i_subtract_mc_t> {
2520 public:
2521 MYFLT *lhs_;
2522 MYFLT *rhs_a_;
2523 MYFLT *rhs_b_;
2524 la_i_mc_create_t *lhs;
2525 la_i_mc_create_t *rhs_a;
2526 la_i_mc_create_t *rhs_b;
init(CSOUND *)2527 int init(CSOUND *) {
2528 toa(lhs_, lhs);
2529 toa(rhs_a_, rhs_a);
2530 toa(rhs_b_, rhs_b);
2531 size_t rowN = gmm::mat_nrows(rhs_a->mc);
2532 size_t columnN = gmm::mat_ncols(rhs_a->mc);
2533 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2534 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2535 lhs->mc(rowI, columnI) =
2536 rhs_a->mc(rowI, columnI) - rhs_b->mc(rowI, columnI);
2537 }
2538 }
2539 return OK;
2540 }
2541 };
2542
2543 /**
2544 * Elementwise subtraction.
2545 * The array on the left-hand side can also appear
2546 * on the right-hand side in order to perform A -= B.
2547 */
2548 class la_k_subtract_mc_t : public OpcodeBase<la_k_subtract_vc_t> {
2549 public:
2550 MYFLT *lhs_;
2551 MYFLT *rhs_a_;
2552 MYFLT *rhs_b_;
2553 la_i_mc_create_t *lhs;
2554 la_i_mc_create_t *rhs_a;
2555 la_i_mc_create_t *rhs_b;
2556 size_t rowN;
2557 size_t columnN;
init(CSOUND *)2558 int init(CSOUND *) {
2559 toa(lhs_, lhs);
2560 toa(rhs_a_, rhs_a);
2561 toa(rhs_b_, rhs_b);
2562 rowN = gmm::mat_nrows(rhs_a->mc);
2563 columnN = gmm::mat_ncols(rhs_a->mc);
2564 return OK;
2565 }
kontrol(CSOUND *)2566 int kontrol(CSOUND *) {
2567 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2568 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2569 lhs->mc(rowI, columnI) =
2570 rhs_a->mc(rowI, columnI) - rhs_b->mc(rowI, columnI);
2571 }
2572 }
2573 return OK;
2574 }
2575 };
2576
2577 /**
2578 * Elementwise multiplication.
2579 * The array on the left-hand side can also appear
2580 * on the right-hand side in order to perform a *= b.
2581 */
2582 class la_i_multiply_vr_t : public OpcodeBase<la_i_multiply_vr_t> {
2583 public:
2584 MYFLT *lhs_;
2585 MYFLT *rhs_a_;
2586 MYFLT *rhs_b_;
2587 la_i_vr_create_t *lhs;
2588 la_i_vr_create_t *rhs_a;
2589 la_i_vr_create_t *rhs_b;
init(CSOUND *)2590 int init(CSOUND *) {
2591 toa(lhs_, lhs);
2592 toa(rhs_a_, rhs_a);
2593 toa(rhs_b_, rhs_b);
2594 for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2595 lhs->vr[i] = rhs_a->vr[i] * rhs_b->vr[i];
2596 }
2597 return OK;
2598 }
2599 };
2600
2601 /**
2602 * Elementwise multiplication.
2603 * The array on the left-hand side can also appear
2604 * on the right-hand side in order to perform a *= b.
2605 */
2606 class la_k_multiply_vr_t : public OpcodeBase<la_k_multiply_vr_t> {
2607 public:
2608 MYFLT *lhs_;
2609 MYFLT *rhs_a_;
2610 MYFLT *rhs_b_;
2611 la_i_vr_create_t *lhs;
2612 la_i_vr_create_t *rhs_a;
2613 la_i_vr_create_t *rhs_b;
init(CSOUND *)2614 int init(CSOUND *) {
2615 toa(lhs_, lhs);
2616 toa(rhs_a_, rhs_a);
2617 toa(rhs_b_, rhs_b);
2618 return OK;
2619 }
kontrol(CSOUND *)2620 int kontrol(CSOUND *) {
2621 for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2622 lhs->vr[i] = rhs_a->vr[i] * rhs_b->vr[i];
2623 }
2624 return OK;
2625 }
2626 };
2627
2628 /**
2629 * Elementwise multiplication.
2630 * The array on the left-hand side can also appear
2631 * on the right-hand side in order to perform a *= b.
2632 */
2633 class la_i_multiply_vc_t : public OpcodeBase<la_i_multiply_vc_t> {
2634 public:
2635 MYFLT *lhs_;
2636 MYFLT *rhs_a_;
2637 MYFLT *rhs_b_;
2638 la_i_vc_create_t *lhs;
2639 la_i_vc_create_t *rhs_a;
2640 la_i_vc_create_t *rhs_b;
init(CSOUND *)2641 int init(CSOUND *) {
2642 toa(lhs_, lhs);
2643 toa(rhs_a_, rhs_a);
2644 toa(rhs_b_, rhs_b);
2645 for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2646 lhs->vc[i] = rhs_a->vc[i] * rhs_b->vc[i];
2647 }
2648 return OK;
2649 }
2650 };
2651
2652 /**
2653 * Elementwise multiplication.
2654 * The array on the left-hand side can also appear
2655 * on the right-hand side in order to perform a *= b.
2656 */
2657 class la_k_multiply_vc_t : public OpcodeBase<la_k_multiply_vc_t> {
2658 public:
2659 MYFLT *lhs_;
2660 MYFLT *rhs_a_;
2661 MYFLT *rhs_b_;
2662 la_i_vc_create_t *lhs;
2663 la_i_vc_create_t *rhs_a;
2664 la_i_vc_create_t *rhs_b;
init(CSOUND *)2665 int init(CSOUND *) {
2666 toa(lhs_, lhs);
2667 toa(rhs_a_, rhs_a);
2668 toa(rhs_b_, rhs_b);
2669 return OK;
2670 }
kontrol(CSOUND *)2671 int kontrol(CSOUND *) {
2672 for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2673 lhs->vc[i] = rhs_a->vc[i] * rhs_b->vc[i];
2674 }
2675 return OK;
2676 }
2677 };
2678
2679 /**
2680 * Elementwise multiplication.
2681 * The array on the left-hand side can also appear
2682 * on the right-hand side in order to perform A *= B.
2683 */
2684 class la_i_multiply_mr_t : public OpcodeBase<la_i_multiply_mr_t> {
2685 public:
2686 MYFLT *lhs_;
2687 MYFLT *rhs_a_;
2688 MYFLT *rhs_b_;
2689 la_i_mr_create_t *lhs;
2690 la_i_mr_create_t *rhs_a;
2691 la_i_mr_create_t *rhs_b;
init(CSOUND *)2692 int init(CSOUND *) {
2693 toa(lhs_, lhs);
2694 toa(rhs_a_, rhs_a);
2695 toa(rhs_b_, rhs_b);
2696 size_t rowN = gmm::mat_nrows(rhs_a->mr);
2697 size_t columnN = gmm::mat_ncols(rhs_a->mr);
2698 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2699 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2700 lhs->mr(rowI, columnI) =
2701 rhs_a->mr(rowI, columnI) * rhs_b->mr(rowI, columnI);
2702 }
2703 }
2704 return OK;
2705 }
2706 };
2707
2708 /**
2709 * Elementwise multiplication.
2710 * The array on the left-hand side can also appear
2711 * on the right-hand side in order to perform A *= B.
2712 */
2713 class la_k_multiply_mr_t : public OpcodeBase<la_k_multiply_mr_t> {
2714 public:
2715 MYFLT *lhs_;
2716 MYFLT *rhs_a_;
2717 MYFLT *rhs_b_;
2718 la_i_mr_create_t *lhs;
2719 la_i_mr_create_t *rhs_a;
2720 la_i_mr_create_t *rhs_b;
2721 size_t rowN;
2722 size_t columnN;
init(CSOUND *)2723 int init(CSOUND *) {
2724 toa(lhs_, lhs);
2725 toa(rhs_a_, rhs_a);
2726 toa(rhs_b_, rhs_b);
2727 rowN = gmm::mat_nrows(rhs_a->mr);
2728 columnN = gmm::mat_ncols(rhs_a->mr);
2729 return OK;
2730 }
kontrol(CSOUND *)2731 int kontrol(CSOUND *) {
2732 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2733 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2734 lhs->mr(rowI, columnI) =
2735 rhs_a->mr(rowI, columnI) * rhs_b->mr(rowI, columnI);
2736 }
2737 }
2738 return OK;
2739 }
2740 };
2741
2742 /**
2743 * Elementwise multiplication.
2744 * The array on the left-hand side can also appear
2745 * on the right-hand side in order to perform A *= B.
2746 */
2747 class la_i_multiply_mc_t : public OpcodeBase<la_i_multiply_mc_t> {
2748 public:
2749 MYFLT *lhs_;
2750 MYFLT *rhs_a_;
2751 MYFLT *rhs_b_;
2752 la_i_mc_create_t *lhs;
2753 la_i_mc_create_t *rhs_a;
2754 la_i_mc_create_t *rhs_b;
init(CSOUND *)2755 int init(CSOUND *) {
2756 toa(lhs_, lhs);
2757 toa(rhs_a_, rhs_a);
2758 toa(rhs_b_, rhs_b);
2759 size_t rowN = gmm::mat_nrows(rhs_a->mc);
2760 size_t columnN = gmm::mat_ncols(rhs_a->mc);
2761 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2762 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2763 lhs->mc(rowI, columnI) =
2764 rhs_a->mc(rowI, columnI) * rhs_b->mc(rowI, columnI);
2765 }
2766 }
2767 return OK;
2768 }
2769 };
2770
2771 /**
2772 * Elementwise multiplication.
2773 * The array on the left-hand side can also appear
2774 * on the right-hand side in order to perform A *= B.
2775 */
2776 class la_k_multiply_mc_t : public OpcodeBase<la_k_multiply_vc_t> {
2777 public:
2778 MYFLT *lhs_;
2779 MYFLT *rhs_a_;
2780 MYFLT *rhs_b_;
2781 la_i_mc_create_t *lhs;
2782 la_i_mc_create_t *rhs_a;
2783 la_i_mc_create_t *rhs_b;
2784 size_t rowN;
2785 size_t columnN;
init(CSOUND *)2786 int init(CSOUND *) {
2787 toa(lhs_, lhs);
2788 toa(rhs_a_, rhs_a);
2789 toa(rhs_b_, rhs_b);
2790 rowN = gmm::mat_nrows(rhs_a->mc);
2791 columnN = gmm::mat_ncols(rhs_a->mc);
2792 return OK;
2793 }
kontrol(CSOUND *)2794 int kontrol(CSOUND *) {
2795 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2796 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2797 lhs->mc(rowI, columnI) =
2798 rhs_a->mc(rowI, columnI) * rhs_b->mc(rowI, columnI);
2799 }
2800 }
2801 return OK;
2802 }
2803 };
2804
2805 /**
2806 * Elementwise division.
2807 * The array on the left-hand side can also appear
2808 * on the right-hand side in order to perform a /= b.
2809 */
2810 class la_i_divide_vr_t : public OpcodeBase<la_i_divide_vr_t> {
2811 public:
2812 MYFLT *lhs_;
2813 MYFLT *rhs_a_;
2814 MYFLT *rhs_b_;
2815 la_i_vr_create_t *lhs;
2816 la_i_vr_create_t *rhs_a;
2817 la_i_vr_create_t *rhs_b;
init(CSOUND *)2818 int init(CSOUND *) {
2819 toa(lhs_, lhs);
2820 toa(rhs_a_, rhs_a);
2821 toa(rhs_b_, rhs_b);
2822 for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2823 lhs->vr[i] = rhs_a->vr[i] / rhs_b->vr[i];
2824 }
2825 return OK;
2826 }
2827 };
2828
2829 /**
2830 * Elementwise division.
2831 * The array on the left-hand side can also appear
2832 * on the right-hand side in order to perform a /= b.
2833 */
2834 class la_k_divide_vr_t : public OpcodeBase<la_k_divide_vr_t> {
2835 public:
2836 MYFLT *lhs_;
2837 MYFLT *rhs_a_;
2838 MYFLT *rhs_b_;
2839 la_i_vr_create_t *lhs;
2840 la_i_vr_create_t *rhs_a;
2841 la_i_vr_create_t *rhs_b;
init(CSOUND *)2842 int init(CSOUND *) {
2843 toa(lhs_, lhs);
2844 toa(rhs_a_, rhs_a);
2845 toa(rhs_b_, rhs_b);
2846 return OK;
2847 }
kontrol(CSOUND *)2848 int kontrol(CSOUND *) {
2849 for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2850 lhs->vr[i] = rhs_a->vr[i] / rhs_b->vr[i];
2851 }
2852 return OK;
2853 }
2854 };
2855
2856 /**
2857 * Elementwise division.
2858 * The array on the left-hand side can also appear
2859 * on the right-hand side in order to perform a /= b.
2860 */
2861 class la_i_divide_vc_t : public OpcodeBase<la_i_divide_vc_t> {
2862 public:
2863 MYFLT *lhs_;
2864 MYFLT *rhs_a_;
2865 MYFLT *rhs_b_;
2866 la_i_vc_create_t *lhs;
2867 la_i_vc_create_t *rhs_a;
2868 la_i_vc_create_t *rhs_b;
init(CSOUND *)2869 int init(CSOUND *) {
2870 toa(lhs_, lhs);
2871 toa(rhs_a_, rhs_a);
2872 toa(rhs_b_, rhs_b);
2873 for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2874 lhs->vc[i] = rhs_a->vc[i] / rhs_b->vc[i];
2875 }
2876 return OK;
2877 }
2878 };
2879
2880 /**
2881 * Elementwise division.
2882 * The array on the left-hand side can also appear
2883 * on the right-hand side in order to perform a /= b.
2884 */
2885 class la_k_divide_vc_t : public OpcodeBase<la_k_divide_vc_t> {
2886 public:
2887 MYFLT *lhs_;
2888 MYFLT *rhs_a_;
2889 MYFLT *rhs_b_;
2890 la_i_vc_create_t *lhs;
2891 la_i_vc_create_t *rhs_a;
2892 la_i_vc_create_t *rhs_b;
init(CSOUND *)2893 int init(CSOUND *) {
2894 toa(lhs_, lhs);
2895 toa(rhs_a_, rhs_a);
2896 toa(rhs_b_, rhs_b);
2897 return OK;
2898 }
kontrol(CSOUND *)2899 int kontrol(CSOUND *) {
2900 for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2901 lhs->vc[i] = rhs_a->vc[i] / rhs_b->vc[i];
2902 }
2903 return OK;
2904 }
2905 };
2906
2907 /**
2908 * Elementwise division.
2909 * The array on the left-hand side can also appear
2910 * on the right-hand side in order to perform A /= B.
2911 */
2912 class la_i_divide_mr_t : public OpcodeBase<la_i_divide_mr_t> {
2913 public:
2914 MYFLT *lhs_;
2915 MYFLT *rhs_a_;
2916 MYFLT *rhs_b_;
2917 la_i_mr_create_t *lhs;
2918 la_i_mr_create_t *rhs_a;
2919 la_i_mr_create_t *rhs_b;
init(CSOUND *)2920 int init(CSOUND *) {
2921 toa(lhs_, lhs);
2922 toa(rhs_a_, rhs_a);
2923 toa(rhs_b_, rhs_b);
2924 size_t rowN = gmm::mat_nrows(rhs_a->mr);
2925 size_t columnN = gmm::mat_ncols(rhs_a->mr);
2926 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2927 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2928 lhs->mr(rowI, columnI) =
2929 rhs_a->mr(rowI, columnI) / rhs_b->mr(rowI, columnI);
2930 }
2931 }
2932 return OK;
2933 }
2934 };
2935
2936 /**
2937 * Elementwise division.
2938 * The array on the left-hand side can also appear
2939 * on the right-hand side in order to perform A /= B.
2940 */
2941 class la_k_divide_mr_t : public OpcodeBase<la_k_divide_mr_t> {
2942 public:
2943 MYFLT *lhs_;
2944 MYFLT *rhs_a_;
2945 MYFLT *rhs_b_;
2946 la_i_mr_create_t *lhs;
2947 la_i_mr_create_t *rhs_a;
2948 la_i_mr_create_t *rhs_b;
2949 size_t rowN;
2950 size_t columnN;
init(CSOUND *)2951 int init(CSOUND *) {
2952 toa(lhs_, lhs);
2953 toa(rhs_a_, rhs_a);
2954 toa(rhs_b_, rhs_b);
2955 rowN = gmm::mat_nrows(rhs_a->mr);
2956 columnN = gmm::mat_ncols(rhs_a->mr);
2957 return OK;
2958 }
kontrol(CSOUND *)2959 int kontrol(CSOUND *) {
2960 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2961 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2962 lhs->mr(rowI, columnI) =
2963 rhs_a->mr(rowI, columnI) / rhs_b->mr(rowI, columnI);
2964 }
2965 }
2966 return OK;
2967 }
2968 };
2969
2970 /**
2971 * Elementwise division.
2972 * The array on the left-hand side can also appear
2973 * on the right-hand side in order to perform A /= B.
2974 */
2975 class la_i_divide_mc_t : public OpcodeBase<la_i_divide_mc_t> {
2976 public:
2977 MYFLT *lhs_;
2978 MYFLT *rhs_a_;
2979 MYFLT *rhs_b_;
2980 la_i_mc_create_t *lhs;
2981 la_i_mc_create_t *rhs_a;
2982 la_i_mc_create_t *rhs_b;
init(CSOUND *)2983 int init(CSOUND *) {
2984 toa(lhs_, lhs);
2985 toa(rhs_a_, rhs_a);
2986 toa(rhs_b_, rhs_b);
2987 size_t rowN = gmm::mat_nrows(rhs_a->mc);
2988 size_t columnN = gmm::mat_ncols(rhs_a->mc);
2989 for (size_t rowI = 0; rowI < rowN; ++rowI) {
2990 for (size_t columnI = 0; columnI < columnN; ++columnI) {
2991 lhs->mc(rowI, columnI) =
2992 rhs_a->mc(rowI, columnI) / rhs_b->mc(rowI, columnI);
2993 }
2994 }
2995 return OK;
2996 }
2997 };
2998
2999 /**
3000 * Elementwise division.
3001 * The array on the left-hand side can also appear
3002 * on the right-hand side in order to perform A /= B.
3003 */
3004 class la_k_divide_mc_t : public OpcodeBase<la_k_divide_vc_t> {
3005 public:
3006 MYFLT *lhs_;
3007 MYFLT *rhs_a_;
3008 MYFLT *rhs_b_;
3009 la_i_mc_create_t *lhs;
3010 la_i_mc_create_t *rhs_a;
3011 la_i_mc_create_t *rhs_b;
3012 size_t rowN;
3013 size_t columnN;
init(CSOUND *)3014 int init(CSOUND *) {
3015 toa(lhs_, lhs);
3016 toa(rhs_a_, rhs_a);
3017 toa(rhs_b_, rhs_b);
3018 rowN = gmm::mat_nrows(rhs_a->mc);
3019 columnN = gmm::mat_ncols(rhs_a->mc);
3020 return OK;
3021 }
kontrol(CSOUND *)3022 int kontrol(CSOUND *) {
3023 for (size_t rowI = 0; rowI < rowN; ++rowI) {
3024 for (size_t columnI = 0; columnI < columnN; ++columnI) {
3025 lhs->mc(rowI, columnI) =
3026 rhs_a->mc(rowI, columnI) / rhs_b->mc(rowI, columnI);
3027 }
3028 }
3029 return OK;
3030 }
3031 };
3032
3033 /**
3034 * Elementwise multiplication.
3035 * The array on the left-hand side can also appear
3036 * on the right-hand side in order to perform a *= b.
3037 */
3038 class la_i_dot_vr_t : public OpcodeBase<la_i_dot_vr_t> {
3039 public:
3040 MYFLT *lhs_;
3041 MYFLT *rhs_a_;
3042 MYFLT *rhs_b_;
3043 la_i_vr_create_t *rhs_a;
3044 la_i_vr_create_t *rhs_b;
init(CSOUND *)3045 int init(CSOUND *) {
3046 toa(rhs_a_, rhs_a);
3047 toa(rhs_b_, rhs_b);
3048 *lhs_ = gmm::vect_sp(rhs_a->vr, rhs_b->vr);
3049 return OK;
3050 }
3051 };
3052
3053 /**
3054 * Elementwise multiplication.
3055 * The array on the left-hand side can also appear
3056 * on the right-hand side in order to perform a *= b.
3057 */
3058 class la_k_dot_vr_t : public OpcodeBase<la_k_dot_vr_t> {
3059 public:
3060 MYFLT *lhs_;
3061 MYFLT *rhs_a_;
3062 MYFLT *rhs_b_;
3063 la_i_vr_create_t *rhs_a;
3064 la_i_vr_create_t *rhs_b;
init(CSOUND *)3065 int init(CSOUND *) {
3066 toa(rhs_a_, rhs_a);
3067 toa(rhs_b_, rhs_b);
3068 return OK;
3069 }
kontrol(CSOUND *)3070 int kontrol(CSOUND *) {
3071 *lhs_ = gmm::vect_sp(rhs_a->vr, rhs_b->vr);
3072 return OK;
3073 }
3074 };
3075
3076 /**
3077 * Elementwise multiplication.
3078 * The array on the left-hand side can also appear
3079 * on the right-hand side in order to perform a *= b.
3080 */
3081 class la_i_dot_vc_t : public OpcodeBase<la_i_dot_vc_t> {
3082 public:
3083 MYFLT *lhs_r;
3084 MYFLT *lhs_i;
3085 MYFLT *rhs_a_;
3086 MYFLT *rhs_b_;
3087 la_i_vc_create_t *rhs_a;
3088 la_i_vc_create_t *rhs_b;
init(CSOUND *)3089 int init(CSOUND *) {
3090 toa(rhs_a_, rhs_a);
3091 toa(rhs_b_, rhs_b);
3092 std::complex<MYFLT> lhs = gmm::vect_sp(rhs_a->vc, rhs_b->vc);
3093 *lhs_r = lhs.real();
3094 *lhs_i = lhs.imag();
3095 return OK;
3096 }
3097 };
3098
3099 /**
3100 * Elementwise multiplication.
3101 * The array on the left-hand side can also appear
3102 * on the right-hand side in order to perform a *= b.
3103 */
3104 class la_k_dot_vc_t : public OpcodeBase<la_k_dot_vc_t> {
3105 public:
3106 MYFLT *lhs_r;
3107 MYFLT *lhs_i;
3108 MYFLT *rhs_a_;
3109 MYFLT *rhs_b_;
3110 la_i_vc_create_t *rhs_a;
3111 la_i_vc_create_t *rhs_b;
init(CSOUND *)3112 int init(CSOUND *) {
3113 toa(rhs_a_, rhs_a);
3114 toa(rhs_b_, rhs_b);
3115 return OK;
3116 }
kontrol(CSOUND *)3117 int kontrol(CSOUND *) {
3118 std::complex<MYFLT> lhs = gmm::vect_sp(rhs_a->vc, rhs_b->vc);
3119 *lhs_r = lhs.real();
3120 *lhs_i = lhs.imag();
3121 return OK;
3122 }
3123 };
3124
3125 class la_i_dot_mr_t : public OpcodeBase<la_i_dot_mr_t> {
3126 public:
3127 MYFLT *lhs_;
3128 MYFLT *rhs_a_;
3129 MYFLT *rhs_b_;
3130 la_i_mr_create_t *lhs;
3131 la_i_mr_create_t *rhs_a;
3132 la_i_mr_create_t *rhs_b;
init(CSOUND *)3133 int init(CSOUND *) {
3134 toa(lhs_, lhs);
3135 toa(rhs_a_, rhs_a);
3136 toa(rhs_b_, rhs_b);
3137 gmm::mult(rhs_a->mr, rhs_b->mr, lhs->mr);
3138 return OK;
3139 }
3140 };
3141
3142 class la_k_dot_mr_t : public OpcodeBase<la_k_dot_mr_t> {
3143 public:
3144 MYFLT *lhs_;
3145 MYFLT *rhs_a_;
3146 MYFLT *rhs_b_;
3147 la_i_mr_create_t *lhs;
3148 la_i_mr_create_t *rhs_a;
3149 la_i_mr_create_t *rhs_b;
init(CSOUND *)3150 int init(CSOUND *) {
3151 toa(lhs_, lhs);
3152 toa(rhs_a_, rhs_a);
3153 toa(rhs_b_, rhs_b);
3154 gmm::mult(rhs_a->mr, rhs_b->mr, lhs->mr);
3155 return OK;
3156 }
kontrol(CSOUND *)3157 int kontrol(CSOUND *) {
3158 gmm::mult(rhs_a->mr, rhs_b->mr, lhs->mr);
3159 return OK;
3160 }
3161 };
3162
3163 class la_i_dot_mc_t : public OpcodeBase<la_i_dot_mc_t> {
3164 public:
3165 MYFLT *lhs_;
3166 MYFLT *rhs_a_;
3167 MYFLT *rhs_b_;
3168 la_i_mc_create_t *lhs;
3169 la_i_mc_create_t *rhs_a;
3170 la_i_mc_create_t *rhs_b;
init(CSOUND *)3171 int init(CSOUND *) {
3172 toa(lhs_, lhs);
3173 toa(rhs_a_, rhs_a);
3174 toa(rhs_b_, rhs_b);
3175 gmm::mult(rhs_a->mc, rhs_b->mc, lhs->mc);
3176 return OK;
3177 }
3178 };
3179
3180 class la_k_dot_mc_t : public OpcodeBase<la_k_dot_mc_t> {
3181 public:
3182 MYFLT *lhs_;
3183 MYFLT *rhs_a_;
3184 MYFLT *rhs_b_;
3185 la_i_mc_create_t *lhs;
3186 la_i_mc_create_t *rhs_a;
3187 la_i_mc_create_t *rhs_b;
init(CSOUND *)3188 int init(CSOUND *) {
3189 toa(lhs_, lhs);
3190 toa(rhs_a_, rhs_a);
3191 toa(rhs_b_, rhs_b);
3192 return OK;
3193 }
kontrol(CSOUND *)3194 int kontrol(CSOUND *) {
3195 gmm::mult(rhs_a->mc, rhs_b->mc, lhs->mc);
3196 return OK;
3197 }
3198 };
3199
3200 class la_i_dot_mr_vr_t : public OpcodeBase<la_i_dot_mr_vr_t> {
3201 public:
3202 MYFLT *lhs_;
3203 MYFLT *rhs_a_;
3204 MYFLT *rhs_b_;
3205 la_i_vr_create_t *lhs;
3206 la_i_mr_create_t *rhs_a;
3207 la_i_vr_create_t *rhs_b;
init(CSOUND *)3208 int init(CSOUND *) {
3209 toa(lhs_, lhs);
3210 toa(rhs_a_, rhs_a);
3211 toa(rhs_b_, rhs_b);
3212 gmm::mult(rhs_a->mr, rhs_b->vr, lhs->vr);
3213 return OK;
3214 }
3215 };
3216
3217 class la_k_dot_mr_vr_t : public OpcodeBase<la_k_dot_mr_vr_t> {
3218 public:
3219 MYFLT *lhs_;
3220 MYFLT *rhs_a_;
3221 MYFLT *rhs_b_;
3222 la_i_vr_create_t *lhs;
3223 la_i_mr_create_t *rhs_a;
3224 la_i_vr_create_t *rhs_b;
init(CSOUND *)3225 int init(CSOUND *) {
3226 toa(lhs_, lhs);
3227 toa(rhs_a_, rhs_a);
3228 toa(rhs_b_, rhs_b);
3229 return OK;
3230 }
kontrol(CSOUND *)3231 int kontrol(CSOUND *) {
3232 gmm::mult(rhs_a->mr, rhs_b->vr, lhs->vr);
3233 return OK;
3234 }
3235 };
3236
3237 class la_i_dot_mc_vc_t : public OpcodeBase<la_i_dot_mc_vc_t> {
3238 public:
3239 MYFLT *lhs_;
3240 MYFLT *rhs_a_;
3241 MYFLT *rhs_b_;
3242 la_i_vc_create_t *lhs;
3243 la_i_mc_create_t *rhs_a;
3244 la_i_vc_create_t *rhs_b;
init(CSOUND *)3245 int init(CSOUND *) {
3246 toa(lhs_, lhs);
3247 toa(rhs_a_, rhs_a);
3248 toa(rhs_b_, rhs_b);
3249 gmm::mult(rhs_a->mc, rhs_b->vc, lhs->vc);
3250 return OK;
3251 }
3252 };
3253
3254 class la_k_dot_mc_vc_t : public OpcodeBase<la_k_dot_mc_vc_t> {
3255 public:
3256 MYFLT *lhs_;
3257 MYFLT *rhs_a_;
3258 MYFLT *rhs_b_;
3259 la_i_vc_create_t *lhs;
3260 la_i_mc_create_t *rhs_a;
3261 la_i_vc_create_t *rhs_b;
init(CSOUND *)3262 int init(CSOUND *) {
3263 toa(lhs_, lhs);
3264 toa(rhs_a_, rhs_a);
3265 toa(rhs_b_, rhs_b);
3266 return OK;
3267 }
kontrol(CSOUND *)3268 int kontrol(CSOUND *) {
3269 gmm::mult(rhs_a->mc, rhs_b->vc, lhs->vc);
3270 return OK;
3271 }
3272 };
3273
3274 class la_i_invert_mr_t : public OpcodeBase<la_i_invert_mr_t> {
3275 public:
3276 MYFLT *imr_lhs;
3277 MYFLT *icondition;
3278 MYFLT *imr_rhs;
3279 la_i_mr_create_t *lhs;
3280 la_i_mr_create_t *rhs;
init(CSOUND *)3281 int init(CSOUND *) {
3282 toa(imr_lhs, lhs);
3283 toa(imr_rhs, rhs);
3284 gmm::copy(rhs->mr, lhs->mr);
3285 *icondition = gmm::lu_inverse(lhs->mr);
3286 return OK;
3287 }
3288 };
3289
3290 class la_k_invert_mr_t : public OpcodeBase<la_k_invert_mr_t> {
3291 public:
3292 MYFLT *imr_lhs;
3293 MYFLT *kcondition;
3294 MYFLT *imr_rhs;
3295 la_i_mr_create_t *lhs;
3296 la_i_mr_create_t *rhs;
init(CSOUND *)3297 int init(CSOUND *) {
3298 toa(imr_lhs, lhs);
3299 toa(imr_rhs, rhs);
3300 return OK;
3301 }
kontrol(CSOUND *)3302 int kontrol(CSOUND *) {
3303 gmm::copy(rhs->mr, lhs->mr);
3304 *kcondition = gmm::lu_inverse(lhs->mr);
3305 return OK;
3306 }
3307 };
3308
3309 class la_i_invert_mc_t : public OpcodeBase<la_i_invert_mc_t> {
3310 public:
3311 MYFLT *imc_lhs;
3312 MYFLT *icondition_r;
3313 MYFLT *icondition_i;
3314 MYFLT *imc_rhs;
3315 la_i_mc_create_t *lhs;
3316 la_i_mc_create_t *rhs;
init(CSOUND *)3317 int init(CSOUND *) {
3318 toa(imc_lhs, lhs);
3319 toa(imc_rhs, rhs);
3320 gmm::copy(rhs->mc, lhs->mc);
3321 std::complex<MYFLT> condition = gmm::lu_inverse(lhs->mc);
3322 *icondition_r = condition.real();
3323 *icondition_i = condition.imag();
3324 return OK;
3325 }
3326 };
3327
3328 class la_k_invert_mc_t : public OpcodeBase<la_k_invert_mc_t> {
3329 public:
3330 MYFLT *imc_lhs;
3331 MYFLT *kcondition_r;
3332 MYFLT *kcondition_i;
3333 MYFLT *imc_rhs;
3334 la_i_mc_create_t *lhs;
3335 la_i_mc_create_t *rhs;
init(CSOUND *)3336 int init(CSOUND *) {
3337 toa(imc_lhs, lhs);
3338 toa(imc_rhs, rhs);
3339 return OK;
3340 }
kontrol(CSOUND *)3341 int kontrol(CSOUND *) {
3342 gmm::copy(rhs->mc, lhs->mc);
3343 std::complex<MYFLT> condition = gmm::lu_inverse(lhs->mc);
3344 *kcondition_r = condition.real();
3345 *kcondition_i = condition.imag();
3346 return OK;
3347 }
3348 };
3349
3350 class la_i_upper_solve_mr_t : public OpcodeBase<la_i_upper_solve_mr_t> {
3351 public:
3352 MYFLT *lhs_;
3353 MYFLT *rhs_;
3354 MYFLT *is_unit;
3355 la_i_vr_create_t *lhs;
3356 la_i_mr_create_t *rhs;
init(CSOUND *)3357 int init(CSOUND *) {
3358 toa(lhs_, lhs);
3359 toa(rhs_, rhs);
3360 gmm::upper_tri_solve(rhs->mr, lhs->vr, bool(*is_unit));
3361 return OK;
3362 }
3363 };
3364
3365 class la_k_upper_solve_mr_t : public OpcodeBase<la_k_upper_solve_mr_t> {
3366 public:
3367 MYFLT *lhs_;
3368 MYFLT *rhs_;
3369 MYFLT *is_unit;
3370 la_i_vr_create_t *lhs;
3371 la_i_mr_create_t *rhs;
init(CSOUND *)3372 int init(CSOUND *) {
3373 toa(lhs_, lhs);
3374 toa(rhs_, rhs);
3375 return OK;
3376 }
kontrol(CSOUND *)3377 int kontrol(CSOUND *) {
3378 gmm::upper_tri_solve(rhs->mr, lhs->vr, bool(*is_unit));
3379 return OK;
3380 }
3381 };
3382
3383 class la_i_upper_solve_mc_t : public OpcodeBase<la_i_upper_solve_mc_t> {
3384 public:
3385 MYFLT *lhs_;
3386 MYFLT *rhs_;
3387 MYFLT *is_unit;
3388 la_i_vc_create_t *lhs;
3389 la_i_mc_create_t *rhs;
init(CSOUND *)3390 int init(CSOUND *) {
3391 toa(lhs_, lhs);
3392 toa(rhs_, rhs);
3393 gmm::upper_tri_solve(rhs->mc, lhs->vc, bool(*is_unit));
3394 return OK;
3395 }
3396 };
3397
3398 class la_k_upper_solve_mc_t : public OpcodeBase<la_k_upper_solve_mc_t> {
3399 public:
3400 MYFLT *lhs_;
3401 MYFLT *rhs_;
3402 MYFLT *is_unit;
3403 la_i_vc_create_t *lhs;
3404 la_i_mc_create_t *rhs;
init(CSOUND *)3405 int init(CSOUND *) {
3406 toa(lhs_, lhs);
3407 toa(rhs_, rhs);
3408 return OK;
3409 }
kontrol(CSOUND *)3410 int kontrol(CSOUND *) {
3411 gmm::upper_tri_solve(rhs->mc, lhs->vc, bool(*is_unit));
3412 return OK;
3413 }
3414 };
3415
3416 class la_i_lower_solve_mr_t : public OpcodeBase<la_i_lower_solve_mr_t> {
3417 public:
3418 MYFLT *lhs_;
3419 MYFLT *rhs_;
3420 MYFLT *is_unit;
3421 la_i_vr_create_t *lhs;
3422 la_i_mr_create_t *rhs;
init(CSOUND *)3423 int init(CSOUND *) {
3424 toa(lhs_, lhs);
3425 toa(rhs_, rhs);
3426 gmm::lower_tri_solve(rhs->mr, lhs->vr, bool(*is_unit));
3427 return OK;
3428 }
3429 };
3430
3431 class la_k_lower_solve_mr_t : public OpcodeBase<la_k_lower_solve_mr_t> {
3432 public:
3433 MYFLT *lhs_;
3434 MYFLT *rhs_;
3435 MYFLT *is_unit;
3436 la_i_vr_create_t *lhs;
3437 la_i_mr_create_t *rhs;
init(CSOUND *)3438 int init(CSOUND *) {
3439 toa(lhs_, lhs);
3440 toa(rhs_, rhs);
3441 return OK;
3442 }
kontrol(CSOUND *)3443 int kontrol(CSOUND *) {
3444 gmm::lower_tri_solve(rhs->mr, lhs->vr, bool(*is_unit));
3445 return OK;
3446 }
3447 };
3448
3449 class la_i_lower_solve_mc_t : public OpcodeBase<la_i_lower_solve_mc_t> {
3450 public:
3451 MYFLT *lhs_;
3452 MYFLT *rhs_;
3453 MYFLT *is_unit;
3454 la_i_vc_create_t *lhs;
3455 la_i_mc_create_t *rhs;
init(CSOUND *)3456 int init(CSOUND *) {
3457 toa(lhs_, lhs);
3458 toa(rhs_, rhs);
3459 gmm::lower_tri_solve(rhs->mc, lhs->vc, bool(*is_unit));
3460 return OK;
3461 }
3462 };
3463
3464 class la_k_lower_solve_mc_t : public OpcodeBase<la_k_lower_solve_mc_t> {
3465 public:
3466 MYFLT *lhs_;
3467 MYFLT *rhs_;
3468 MYFLT *is_unit;
3469 la_i_vc_create_t *lhs;
3470 la_i_mc_create_t *rhs;
init(CSOUND *)3471 int init(CSOUND *) {
3472 toa(lhs_, lhs);
3473 toa(rhs_, rhs);
3474 return OK;
3475 }
kontrol(CSOUND *)3476 int kontrol(CSOUND *) {
3477 gmm::lower_tri_solve(rhs->mc, lhs->vc, bool(*is_unit));
3478 return OK;
3479 }
3480 };
3481
3482 class la_i_lu_factor_mr_t : public OpcodeBase<la_i_lu_factor_mr_t> {
3483 public:
3484 MYFLT *lhs_;
3485 MYFLT *pivot_;
3486 MYFLT *isize;
3487 MYFLT *rhs_;
3488 la_i_mr_create_t *lhs;
3489 la_i_vr_create_t *pivot;
3490 la_i_mr_create_t *rhs;
3491 #if defined(GMM_VERSION)
3492 gmm::lapack_ipvt pivot__;
3493 #else
3494 std::vector<size_t> pivot__;
3495 #endif
3496 size_t pivot_size;
init(CSOUND *)3497 int init(CSOUND *) {
3498 toa(lhs_, lhs);
3499 toa(rhs_, pivot);
3500 toa(rhs_, rhs);
3501 pivot_size = gmm::mat_nrows(rhs->mr);
3502 pivot__.resize(pivot_size);
3503 gmm::copy(rhs->mr, lhs->mr);
3504 *isize = gmm::lu_factor(lhs->mr, pivot__);
3505 for (size_t i = 0; i < pivot_size; ++i) {
3506 #if defined(GMM_VERSION)
3507 pivot->vr[i] = pivot__.get(i);
3508 #else
3509 pivot->vr[i] = pivot__[i];
3510 #endif
3511 }
3512 return OK;
3513 }
3514 };
3515
3516 class la_k_lu_factor_mr_t : public OpcodeBase<la_k_lu_factor_mr_t> {
3517 public:
3518 MYFLT *lhs_;
3519 MYFLT *pivot_;
3520 MYFLT *ksize;
3521 MYFLT *rhs_;
3522 la_i_mr_create_t *lhs;
3523 la_i_vr_create_t *pivot;
3524 la_i_mr_create_t *rhs;
3525 #if defined(GMM_VERSION)
3526 gmm::lapack_ipvt pivot__;
3527 #else
3528 std::vector<size_t> pivot__;
3529 #endif
3530 size_t pivot_size;
init(CSOUND *)3531 int init(CSOUND *) {
3532 toa(lhs_, lhs);
3533 toa(rhs_, pivot);
3534 toa(rhs_, rhs);
3535 return OK;
3536 }
kontrol(CSOUND *)3537 int kontrol(CSOUND *) {
3538 pivot_size = gmm::mat_nrows(rhs->mr);
3539 pivot__.resize(pivot_size);
3540 gmm::copy(rhs->mr, lhs->mr);
3541 *ksize = gmm::lu_factor(lhs->mr, pivot__);
3542 for (size_t i = 0; i < pivot_size; ++i) {
3543 #if defined(GMM_VERSION)
3544 pivot->vr[i] = pivot__.get(i);
3545 #else
3546 pivot->vr[i] = pivot__[i];
3547 #endif
3548 }
3549 return OK;
3550 }
3551 };
3552
3553 class la_i_lu_factor_mc_t : public OpcodeBase<la_i_lu_factor_mc_t> {
3554 public:
3555 MYFLT *lhs_;
3556 MYFLT *pivot_;
3557 MYFLT *isize;
3558 MYFLT *rhs_;
3559 la_i_mc_create_t *lhs;
3560 la_i_vr_create_t *pivot;
3561 la_i_mc_create_t *rhs;
3562 #if defined(GMM_VERSION)
3563 gmm::lapack_ipvt pivot__;
3564 #else
3565 std::vector<size_t> pivot__;
3566 #endif
3567 size_t pivot_size;
init(CSOUND *)3568 int init(CSOUND *) {
3569 toa(lhs_, lhs);
3570 toa(rhs_, pivot);
3571 toa(rhs_, rhs);
3572 pivot_size = gmm::mat_nrows(rhs->mc);
3573 pivot__.resize(pivot_size);
3574 gmm::copy(rhs->mc, lhs->mc);
3575 *isize = gmm::lu_factor(lhs->mc, pivot__);
3576 for (size_t i = 0; i < pivot_size; ++i) {
3577 #if defined(GMM_VERSION)
3578 pivot->vr[i] = pivot__.get(i);
3579 #else
3580 pivot->vr[i] = pivot__[i];
3581 #endif
3582 }
3583 return OK;
3584 }
3585 };
3586
3587 class la_k_lu_factor_mc_t : public OpcodeBase<la_k_lu_factor_mc_t> {
3588 public:
3589 MYFLT *lhs_;
3590 MYFLT *pivot_;
3591 MYFLT *ksize;
3592 MYFLT *rhs_;
3593 la_i_mc_create_t *lhs;
3594 la_i_vr_create_t *pivot;
3595 la_i_mc_create_t *rhs;
3596 #if defined(GMM_VERSION)
3597 gmm::lapack_ipvt pivot__;
3598 #else
3599 std::vector<size_t> pivot__;
3600 #endif
3601 size_t pivot_size;
init(CSOUND *)3602 int init(CSOUND *) {
3603 toa(lhs_, lhs);
3604 toa(rhs_, pivot);
3605 toa(rhs_, rhs);
3606 return OK;
3607 }
kontrol(CSOUND *)3608 int kontrol(CSOUND *) {
3609 pivot_size = gmm::mat_nrows(rhs->mc);
3610 pivot__.resize(pivot_size);
3611 gmm::copy(rhs->mc, lhs->mc);
3612 *ksize = gmm::lu_factor(lhs->mc, pivot__);
3613 for (size_t i = 0; i < pivot_size; ++i) {
3614 #if defined(GMM_VERSION)
3615 pivot->vr[i] = pivot__.get(i);
3616 #else
3617 pivot->vr[i] = pivot__[i];
3618 #endif
3619 }
3620 return OK;
3621 }
3622 };
3623
3624 class la_i_lu_solve_mr_t : public OpcodeBase<la_i_lu_solve_mr_t> {
3625 public:
3626 MYFLT *lhs_x_;
3627 MYFLT *rhs_A_;
3628 MYFLT *rhs_b_;
3629 la_i_vr_create_t *lhs_x;
3630 la_i_mr_create_t *rhs_A;
3631 la_i_vr_create_t *rhs_b;
init(CSOUND *)3632 int init(CSOUND *) {
3633 toa(lhs_x_, lhs_x);
3634 toa(rhs_A_, rhs_A);
3635 toa(rhs_b_, rhs_b);
3636 gmm::lu_solve(rhs_A->mr, lhs_x->vr, rhs_b->vr);
3637 return OK;
3638 }
3639 };
3640
3641 class la_k_lu_solve_mr_t : public OpcodeBase<la_k_lu_solve_mr_t> {
3642 public:
3643 MYFLT *lhs_x_;
3644 MYFLT *rhs_A_;
3645 MYFLT *rhs_b_;
3646 la_i_vr_create_t *lhs_x;
3647 la_i_mr_create_t *rhs_A;
3648 la_i_vr_create_t *rhs_b;
init(CSOUND *)3649 int init(CSOUND *) {
3650 toa(lhs_x_, lhs_x);
3651 toa(rhs_A_, rhs_A);
3652 toa(rhs_b_, rhs_b);
3653 return OK;
3654 }
kontrol(CSOUND *)3655 int kontrol(CSOUND *) {
3656 gmm::lu_solve(rhs_A->mr, lhs_x->vr, rhs_b->vr);
3657 return OK;
3658 }
3659 };
3660
3661 class la_i_lu_solve_mc_t : public OpcodeBase<la_i_lu_solve_mc_t> {
3662 public:
3663 MYFLT *lhs_x_;
3664 MYFLT *rhs_A_;
3665 MYFLT *rhs_b_;
3666 la_i_vc_create_t *lhs_x;
3667 la_i_mc_create_t *rhs_A;
3668 la_i_vc_create_t *rhs_b;
init(CSOUND *)3669 int init(CSOUND *) {
3670 toa(lhs_x_, lhs_x);
3671 toa(rhs_A_, rhs_A);
3672 toa(rhs_b_, rhs_b);
3673 gmm::lu_solve(rhs_A->mc, lhs_x->vc, rhs_b->vc);
3674 return OK;
3675 }
3676 };
3677
3678 class la_k_lu_solve_mc_t : public OpcodeBase<la_k_lu_solve_mc_t> {
3679 public:
3680 MYFLT *lhs_x_;
3681 MYFLT *rhs_A_;
3682 MYFLT *rhs_b_;
3683 la_i_vc_create_t *lhs_x;
3684 la_i_mc_create_t *rhs_A;
3685 la_i_vc_create_t *rhs_b;
init(CSOUND *)3686 int init(CSOUND *) {
3687 toa(lhs_x_, lhs_x);
3688 toa(rhs_A_, rhs_A);
3689 toa(rhs_b_, rhs_b);
3690 return OK;
3691 }
kontrol(CSOUND *)3692 int kontrol(CSOUND *) {
3693 gmm::lu_solve(rhs_A->mc, lhs_x->vc, rhs_b->vc);
3694 return OK;
3695 }
3696 };
3697
3698 class la_i_qr_factor_mr_t : public OpcodeBase<la_i_qr_factor_mr_t> {
3699 public:
3700 MYFLT *lhs_Q_;
3701 MYFLT *lhs_R_;
3702 MYFLT *rhs_A_;
3703 la_i_mr_create_t *lhs_Q;
3704 la_i_mr_create_t *lhs_R;
3705 la_i_mr_create_t *rhs_A;
init(CSOUND *)3706 int init(CSOUND *) {
3707 toa(lhs_Q_, lhs_Q);
3708 toa(lhs_R_, lhs_R);
3709 toa(rhs_A_, rhs_A);
3710 gmm::qr_factor(rhs_A->mr, lhs_Q->mr, lhs_R->mr);
3711 return OK;
3712 }
3713 };
3714
3715 class la_k_qr_factor_mr_t : public OpcodeBase<la_k_qr_factor_mr_t> {
3716 public:
3717 MYFLT *lhs_Q_;
3718 MYFLT *lhs_R_;
3719 MYFLT *rhs_A_;
3720 la_i_mr_create_t *lhs_Q;
3721 la_i_mr_create_t *lhs_R;
3722 la_i_mr_create_t *rhs_A;
init(CSOUND *)3723 int init(CSOUND *) {
3724 toa(lhs_Q_, lhs_Q);
3725 toa(lhs_R_, lhs_R);
3726 toa(rhs_A_, rhs_A);
3727 return OK;
3728 }
kontrol(CSOUND *)3729 int kontrol(CSOUND *) {
3730 gmm::qr_factor(rhs_A->mr, lhs_Q->mr, lhs_R->mr);
3731 return OK;
3732 }
3733 };
3734
3735 class la_i_qr_factor_mc_t : public OpcodeBase<la_i_qr_factor_mc_t> {
3736 public:
3737 MYFLT *lhs_Q_;
3738 MYFLT *lhs_R_;
3739 MYFLT *rhs_A_;
3740 la_i_mc_create_t *lhs_Q;
3741 la_i_mc_create_t *lhs_R;
3742 la_i_mc_create_t *rhs_A;
init(CSOUND *)3743 int init(CSOUND *) {
3744 toa(lhs_Q_, lhs_Q);
3745 toa(lhs_R_, lhs_R);
3746 toa(rhs_A_, rhs_A);
3747 gmm::qr_factor(rhs_A->mc, lhs_Q->mc, lhs_R->mc);
3748 return OK;
3749 }
3750 };
3751
3752 class la_k_qr_factor_mc_t : public OpcodeBase<la_k_qr_factor_mc_t> {
3753 public:
3754 MYFLT *lhs_Q_;
3755 MYFLT *lhs_R_;
3756 MYFLT *rhs_A_;
3757 la_i_mc_create_t *lhs_Q;
3758 la_i_mc_create_t *lhs_R;
3759 la_i_mc_create_t *rhs_A;
init(CSOUND *)3760 int init(CSOUND *) {
3761 toa(lhs_Q_, lhs_Q);
3762 toa(lhs_R_, lhs_R);
3763 toa(rhs_A_, rhs_A);
3764 return OK;
3765 }
kontrol(CSOUND *)3766 int kontrol(CSOUND *) {
3767 gmm::qr_factor(rhs_A->mc, lhs_Q->mc, lhs_R->mc);
3768 return OK;
3769 }
3770 };
3771
3772 class la_i_qr_eigen_mr_t : public OpcodeBase<la_i_qr_eigen_mr_t> {
3773 public:
3774 MYFLT *lhs_eigenvalues_;
3775 MYFLT *rhs_A_;
3776 MYFLT *itolerance;
3777 la_i_vr_create_t *lhs_eigenvalues;
3778 la_i_mr_create_t *rhs_A;
init(CSOUND *)3779 int init(CSOUND *) {
3780 toa(lhs_eigenvalues_, lhs_eigenvalues);
3781 toa(rhs_A_, rhs_A);
3782 gmm::implicit_qr_algorithm(rhs_A->mr, lhs_eigenvalues->vr,
3783 double(*itolerance));
3784 return OK;
3785 }
3786 };
3787
3788 class la_k_qr_eigen_mr_t : public OpcodeBase<la_k_qr_eigen_mr_t> {
3789 public:
3790 MYFLT *lhs_eigenvalues_;
3791 MYFLT *rhs_A_;
3792 MYFLT *ktolerance;
3793 la_i_vr_create_t *lhs_eigenvalues;
3794 la_i_mr_create_t *rhs_A;
init(CSOUND *)3795 int init(CSOUND *) {
3796 toa(lhs_eigenvalues_, lhs_eigenvalues);
3797 toa(rhs_A_, rhs_A);
3798 return OK;
3799 }
kontrol(CSOUND *)3800 int kontrol(CSOUND *) {
3801 gmm::implicit_qr_algorithm(rhs_A->mr, lhs_eigenvalues->vr,
3802 double(*ktolerance));
3803 return OK;
3804 }
3805 };
3806
3807 class la_i_qr_eigen_mc_t : public OpcodeBase<la_i_qr_eigen_mc_t> {
3808 public:
3809 MYFLT *lhs_eigenvalues_;
3810 MYFLT *rhs_A_;
3811 MYFLT *itolerance;
3812 la_i_vc_create_t *lhs_eigenvalues;
3813 la_i_mc_create_t *rhs_A;
init(CSOUND *)3814 int init(CSOUND *) {
3815 toa(lhs_eigenvalues_, lhs_eigenvalues);
3816 toa(rhs_A_, rhs_A);
3817 gmm::implicit_qr_algorithm(rhs_A->mc, lhs_eigenvalues->vc,
3818 double(*itolerance));
3819 return OK;
3820 }
3821 };
3822
3823 class la_k_qr_eigen_mc_t : public OpcodeBase<la_k_qr_eigen_mc_t> {
3824 public:
3825 MYFLT *lhs_eigenvalues_;
3826 MYFLT *rhs_A_;
3827 MYFLT *ktolerance;
3828 la_i_vc_create_t *lhs_eigenvalues;
3829 la_i_mc_create_t *rhs_A;
init(CSOUND *)3830 int init(CSOUND *) {
3831 toa(lhs_eigenvalues_, lhs_eigenvalues);
3832 toa(rhs_A_, rhs_A);
3833 return OK;
3834 }
kontrol(CSOUND *)3835 int kontrol(CSOUND *) {
3836 gmm::implicit_qr_algorithm(rhs_A->mc, lhs_eigenvalues->vc,
3837 double(*ktolerance));
3838 return OK;
3839 }
3840 };
3841
3842 class la_i_qr_sym_eigen_mr_t : public OpcodeBase<la_i_qr_sym_eigen_mr_t> {
3843 public:
3844 MYFLT *lhs_eigenvalues_;
3845 MYFLT *lhs_eigenvectors_;
3846 MYFLT *rhs_A_;
3847 MYFLT *itolerance;
3848 la_i_vr_create_t *lhs_eigenvalues;
3849 la_i_mr_create_t *lhs_eigenvectors;
3850 la_i_mr_create_t *rhs_A;
init(CSOUND *)3851 int init(CSOUND *) {
3852 toa(lhs_eigenvalues_, lhs_eigenvalues);
3853 toa(lhs_eigenvectors_, lhs_eigenvectors);
3854 toa(rhs_A_, rhs_A);
3855 gmm::implicit_qr_algorithm(rhs_A->mr, lhs_eigenvalues->vr,
3856 lhs_eigenvectors->mr, double(*itolerance));
3857 return OK;
3858 }
3859 };
3860
3861 class la_k_qr_sym_eigen_mr_t : public OpcodeBase<la_k_qr_sym_eigen_mr_t> {
3862 public:
3863 MYFLT *lhs_eigenvalues_;
3864 MYFLT *lhs_eigenvectors_;
3865 MYFLT *rhs_A_;
3866 MYFLT *ktolerance;
3867 la_i_vr_create_t *lhs_eigenvalues;
3868 la_i_mr_create_t *lhs_eigenvectors;
3869 la_i_mr_create_t *rhs_A;
init(CSOUND *)3870 int init(CSOUND *) {
3871 toa(lhs_eigenvalues_, lhs_eigenvalues);
3872 toa(lhs_eigenvectors_, lhs_eigenvectors);
3873 toa(rhs_A_, rhs_A);
3874 return OK;
3875 }
kontrol(CSOUND *)3876 int kontrol(CSOUND *) {
3877 gmm::implicit_qr_algorithm(rhs_A->mr, lhs_eigenvalues->vr,
3878 lhs_eigenvectors->mr, double(*ktolerance));
3879 return OK;
3880 }
3881 };
3882
3883 class la_i_qr_sym_eigen_mc_t : public OpcodeBase<la_i_qr_sym_eigen_mc_t> {
3884 public:
3885 MYFLT *lhs_eigenvalues_;
3886 MYFLT *lhs_eigenvectors_;
3887 MYFLT *rhs_A_;
3888 MYFLT *itolerance;
3889 la_i_vc_create_t *lhs_eigenvalues;
3890 la_i_mc_create_t *lhs_eigenvectors;
3891 la_i_mc_create_t *rhs_A;
init(CSOUND *)3892 int init(CSOUND *) {
3893 toa(lhs_eigenvalues_, lhs_eigenvalues);
3894 toa(lhs_eigenvectors_, lhs_eigenvectors);
3895 toa(rhs_A_, rhs_A);
3896 gmm::implicit_qr_algorithm(rhs_A->mc, lhs_eigenvalues->vc,
3897 lhs_eigenvectors->mc, double(*itolerance));
3898 return OK;
3899 }
3900 };
3901
3902 class la_k_qr_sym_eigen_mc_t : public OpcodeBase<la_k_qr_sym_eigen_mc_t> {
3903 public:
3904 MYFLT *lhs_eigenvalues_;
3905 MYFLT *lhs_eigenvectors_;
3906 MYFLT *rhs_A_;
3907 MYFLT *ktolerance;
3908 la_i_vc_create_t *lhs_eigenvalues;
3909 la_i_mc_create_t *lhs_eigenvectors;
3910 la_i_mc_create_t *rhs_A;
init(CSOUND *)3911 int init(CSOUND *) {
3912 toa(lhs_eigenvalues_, lhs_eigenvalues);
3913 toa(lhs_eigenvectors_, lhs_eigenvectors);
3914 toa(rhs_A_, rhs_A);
3915 return OK;
3916 }
kontrol(CSOUND *)3917 int kontrol(CSOUND *) {
3918 gmm::implicit_qr_algorithm(rhs_A->mc, lhs_eigenvalues->vc,
3919 lhs_eigenvectors->mc, double(*ktolerance));
3920 return OK;
3921 }
3922 };
3923
3924 extern "C" {
3925
csoundModuleCreate(CSOUND * csound)3926 PUBLIC int csoundModuleCreate(CSOUND *csound) { return 0; }
3927
csoundModuleInit(CSOUND * csound)3928 PUBLIC int csoundModuleInit(CSOUND *csound) {
3929 int status = 0;
3930 status |= csound->AppendOpcode(
3931 csound, "la_i_vr_create", sizeof(la_i_vr_create_t), 0, 1, "i", "i",
3932 (int (*)(CSOUND *, void *)) & la_i_vr_create_t::init_,
3933 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3934 status |= csound->AppendOpcode(
3935 csound, "la_i_vc_create", sizeof(la_i_vr_create_t), 0, 1, "i", "i",
3936 (int (*)(CSOUND *, void *)) & la_i_vc_create_t::init_,
3937 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3938 status |= csound->AppendOpcode(
3939 csound, "la_i_mr_create", sizeof(la_i_mr_create_t), 0, 1, "i", "iio",
3940 (int (*)(CSOUND *, void *)) & la_i_mr_create_t::init_,
3941 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3942 status |= csound->AppendOpcode(
3943 csound, "la_i_mc_create", sizeof(la_i_mc_create_t), 0, 1, "i", "iioo",
3944 (int (*)(CSOUND *, void *)) & la_i_mc_create_t::init_,
3945 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3946 status |= csound->AppendOpcode(
3947 csound, "la_i_size_vr", sizeof(la_i_size_vr_t), 0, 1, "i", "i",
3948 (int (*)(CSOUND *, void *)) & la_i_size_vr_t::init_,
3949 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3950 status |= csound->AppendOpcode(
3951 csound, "la_i_size_vc", sizeof(la_i_size_vc_t), 0, 1, "i", "i",
3952 (int (*)(CSOUND *, void *)) & la_i_size_vc_t::init_,
3953 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3954 status |= csound->AppendOpcode(
3955 csound, "la_i_size_mr", sizeof(la_i_size_mr_t), 0, 1, "ii", "i",
3956 (int (*)(CSOUND *, void *)) & la_i_size_mr_t::init_,
3957 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3958 status |= csound->AppendOpcode(
3959 csound, "la_i_size_mc", sizeof(la_i_size_mc_t), 0, 1, "ii", "i",
3960 (int (*)(CSOUND *, void *)) & la_i_size_mc_t::init_,
3961 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3962 status |= csound->AppendOpcode(
3963 csound, "la_k_current_f", sizeof(la_k_current_f_t), 0, 3, "k", "f",
3964 (int (*)(CSOUND *, void *)) & la_k_current_f_t::init_,
3965 (int (*)(CSOUND *, void *)) & la_k_current_f_t::kontrol_,
3966 (int (*)(CSOUND *, void *))0);
3967 status |= csound->AppendOpcode(
3968 csound, "la_k_current_vr", sizeof(la_k_current_vr_t), 0, 3, "k", "i",
3969 (int (*)(CSOUND *, void *)) & la_k_current_vr_t::init_,
3970 (int (*)(CSOUND *, void *)) & la_k_current_vr_t::kontrol_,
3971 (int (*)(CSOUND *, void *))0);
3972 status |= csound->AppendOpcode(
3973 csound, "la_i_print_vr", sizeof(la_i_print_vr_t), 0, 1, "", "i",
3974 (int (*)(CSOUND *, void *)) & la_i_print_vr_t::init_,
3975 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3976 status |= csound->AppendOpcode(
3977 csound, "la_i_print_vc", sizeof(la_i_print_vc_t), 0, 1, "", "i",
3978 (int (*)(CSOUND *, void *)) & la_i_print_vc_t::init_,
3979 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3980 status |= csound->AppendOpcode(
3981 csound, "la_i_print_mr", sizeof(la_i_print_mr_t), 0, 1, "", "i",
3982 (int (*)(CSOUND *, void *)) & la_i_print_mr_t::init_,
3983 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3984 status |= csound->AppendOpcode(
3985 csound, "la_i_print_mc", sizeof(la_i_print_mc_t), 0, 1, "", "i",
3986 (int (*)(CSOUND *, void *)) & la_i_print_mc_t::init_,
3987 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3988 status |= csound->AppendOpcode(
3989 csound, "la_i_assign_vr", sizeof(la_i_assign_vr_t), 0, 1, "i", "i",
3990 (int (*)(CSOUND *, void *)) & la_i_assign_vr_t::init_,
3991 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3992 status |= csound->AppendOpcode(
3993 csound, "la_k_assign_vr", sizeof(la_k_assign_vr_t), 0, 3, "i", "k",
3994 (int (*)(CSOUND *, void *)) & la_k_assign_vr_t::init_,
3995 (int (*)(CSOUND *, void *)) & la_k_assign_vr_t::kontrol_,
3996 (int (*)(CSOUND *, void *))0);
3997 status |= csound->AppendOpcode(
3998 csound, "la_i_assign_vc", sizeof(la_i_assign_vc_t), 0, 1, "i", "i",
3999 (int (*)(CSOUND *, void *)) & la_i_assign_vc_t::init_,
4000 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4001 status |= csound->AppendOpcode(
4002 csound, "la_k_assign_vc", sizeof(la_k_assign_vc_t), 0, 3, "i", "k",
4003 (int (*)(CSOUND *, void *)) & la_k_assign_vc_t::init_,
4004 (int (*)(CSOUND *, void *)) & la_k_assign_vc_t::kontrol_,
4005 (int (*)(CSOUND *, void *))0);
4006 status |= csound->AppendOpcode(
4007 csound, "la_i_assign_mr", sizeof(la_i_assign_mr_t), 0, 1, "i", "i",
4008 (int (*)(CSOUND *, void *)) & la_i_assign_mr_t::init_,
4009 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4010 status |= csound->AppendOpcode(
4011 csound, "la_k_assign_mr", sizeof(la_k_assign_mr_t), 0, 3, "i", "k",
4012 (int (*)(CSOUND *, void *)) & la_k_assign_mr_t::init_,
4013 (int (*)(CSOUND *, void *)) & la_k_assign_mr_t::kontrol_,
4014 (int (*)(CSOUND *, void *))0);
4015 status |= csound->AppendOpcode(
4016 csound, "la_i_assign_mc", sizeof(la_i_assign_mc_t), 0, 1, "i", "i",
4017 (int (*)(CSOUND *, void *)) & la_i_assign_mc_t::init_,
4018 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4019 status |= csound->AppendOpcode(
4020 csound, "la_k_assign_mc", sizeof(la_k_assign_mc_t), 0, 3, "i", "k",
4021 (int (*)(CSOUND *, void *)) & la_k_assign_mc_t::init_,
4022 (int (*)(CSOUND *, void *)) & la_k_assign_mc_t::kontrol_,
4023 (int (*)(CSOUND *, void *))0);
4024 status |= csound->AppendOpcode(
4025 csound, "la_k_assign_a", sizeof(la_k_assign_a_t), 0, 3, "i", "a",
4026 (int (*)(CSOUND *, void *)) & la_k_assign_a_t::init_,
4027 (int (*)(CSOUND *, void *)) & la_k_assign_a_t::kontrol_,
4028 (int (*)(CSOUND *, void *))0);
4029 status |= csound->AppendOpcode(
4030 csound, "la_i_assign_t", sizeof(la_i_assign_t_t), TR, 1, "i", "i",
4031 (int (*)(CSOUND *, void *)) & la_i_assign_t_t::init_,
4032 (int (*)(CSOUND *, void *)) & la_i_assign_t_t::kontrol_,
4033 (int (*)(CSOUND *, void *))0);
4034 status |= csound->AppendOpcode(
4035 csound, "la_k_assign_t", sizeof(la_k_assign_t_t), TR, 3, "i", "k",
4036 (int (*)(CSOUND *, void *)) & la_k_assign_t_t::init_,
4037 (int (*)(CSOUND *, void *)) & la_k_assign_t_t::kontrol_,
4038 (int (*)(CSOUND *, void *))0);
4039 status |= csound->AppendOpcode(
4040 csound, "la_k_assign_f", sizeof(la_k_assign_f_t), 0, 3, "i", "f",
4041 (int (*)(CSOUND *, void *)) & la_k_assign_f_t::init_,
4042 (int (*)(CSOUND *, void *)) & la_k_assign_f_t::kontrol_,
4043 (int (*)(CSOUND *, void *))0);
4044 status |= csound->AppendOpcode(
4045 csound, "la_k_a_assign", sizeof(la_k_a_assign_t), 0, 3, "a", "k",
4046 (int (*)(CSOUND *, void *)) & la_k_a_assign_t::init_,
4047 (int (*)(CSOUND *, void *)) & la_k_a_assign_t::kontrol_,
4048 (int (*)(CSOUND *, void *))0);
4049 status |= csound->AppendOpcode(
4050 csound, "la_i_t_assign", sizeof(la_i_t_assign_t), TW, 1, "i", "i",
4051 (int (*)(CSOUND *, void *)) & la_i_t_assign_t::init_,
4052 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4053 status |= csound->AppendOpcode(
4054 csound, "la_k_t_assign", sizeof(la_k_t_assign_t), TW, 3, "i", "k",
4055 (int (*)(CSOUND *, void *)) & la_k_t_assign_t::init_,
4056 (int (*)(CSOUND *, void *)) & la_k_t_assign_t::kontrol_,
4057 (int (*)(CSOUND *, void *))0);
4058 status |= csound->AppendOpcode(
4059 csound, "la_k_f_assign", sizeof(la_k_f_assign_t), 0, 3, "f", "p",
4060 (int (*)(CSOUND *, void *)) & la_k_f_assign_t::init_,
4061 (int (*)(CSOUND *, void *)) & la_k_f_assign_t::kontrol_,
4062 (int (*)(CSOUND *, void *))0);
4063 status |= csound->AppendOpcode(
4064 csound, "la_i_random_vr", sizeof(la_i_random_vr_t), 0, 1, "i", "p",
4065 (int (*)(CSOUND *, void *)) & la_i_random_vr_t::init_,
4066 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4067 status |= csound->AppendOpcode(
4068 csound, "la_k_random_vr", sizeof(la_k_random_vr_t), 0, 3, "i", "p",
4069 (int (*)(CSOUND *, void *)) & la_k_random_vr_t::init_,
4070 (int (*)(CSOUND *, void *)) & la_k_random_vr_t::kontrol_,
4071 (int (*)(CSOUND *, void *))0);
4072 status |= csound->AppendOpcode(
4073 csound, "la_i_random_vc", sizeof(la_i_random_vc_t), 0, 1, "i", "p",
4074 (int (*)(CSOUND *, void *)) & la_i_random_vc_t::init_,
4075 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4076 status |= csound->AppendOpcode(
4077 csound, "la_k_random_vc", sizeof(la_k_random_vc_t), 0, 3, "i", "p",
4078 (int (*)(CSOUND *, void *)) & la_k_random_vc_t::init_,
4079 (int (*)(CSOUND *, void *)) & la_k_random_vc_t::kontrol_,
4080 (int (*)(CSOUND *, void *))0);
4081 status |= csound->AppendOpcode(
4082 csound, "la_i_random_mr", sizeof(la_i_random_mr_t), 0, 1, "i", "p",
4083 (int (*)(CSOUND *, void *)) & la_i_random_mr_t::init_,
4084 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4085 status |= csound->AppendOpcode(
4086 csound, "la_k_random_mr", sizeof(la_k_random_mr_t), 0, 3, "i", "p",
4087 (int (*)(CSOUND *, void *)) & la_k_random_mr_t::init_,
4088 (int (*)(CSOUND *, void *)) & la_k_random_mr_t::kontrol_,
4089 (int (*)(CSOUND *, void *))0);
4090 status |= csound->AppendOpcode(
4091 csound, "la_i_random_mc", sizeof(la_i_random_mc_t), 0, 1, "i", "p",
4092 (int (*)(CSOUND *, void *)) & la_i_random_mc_t::init_,
4093 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4094 status |= csound->AppendOpcode(
4095 csound, "la_k_random_mc", sizeof(la_k_random_mc_t), 0, 3, "i", "p",
4096 (int (*)(CSOUND *, void *)) & la_k_random_mc_t::init_,
4097 (int (*)(CSOUND *, void *)) & la_k_random_mc_t::kontrol_,
4098 (int (*)(CSOUND *, void *))0);
4099 status |= csound->AppendOpcode(
4100 csound, "la_i_vr_set", sizeof(la_i_vr_set_t), 0, 1, "i", "ii",
4101 (int (*)(CSOUND *, void *)) & la_i_vr_set_t::init_,
4102 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4103 status |= csound->AppendOpcode(
4104 csound, "la_k_vr_set", sizeof(la_k_vr_set_t), 0, 3, "i", "kk",
4105 (int (*)(CSOUND *, void *)) & la_k_vr_set_t::init_,
4106 (int (*)(CSOUND *, void *)) & la_k_vr_set_t::kontrol_,
4107 (int (*)(CSOUND *, void *))0);
4108 status |= csound->AppendOpcode(
4109 csound, "la_i_vc_set", sizeof(la_i_vc_set_t), 0, 1, "i", "iii",
4110 (int (*)(CSOUND *, void *)) & la_i_vc_set_t::init_,
4111 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4112 status |= csound->AppendOpcode(
4113 csound, "la_k_vc_set", sizeof(la_k_vc_set_t), 0, 3, "i", "kkk",
4114 (int (*)(CSOUND *, void *)) & la_k_vc_set_t::init_,
4115 (int (*)(CSOUND *, void *)) & la_k_vc_set_t::kontrol_,
4116 (int (*)(CSOUND *, void *))0);
4117 status |= csound->AppendOpcode(
4118 csound, "la_i_mr_set", sizeof(la_i_mr_set_t), 0, 1, "i", "iii",
4119 (int (*)(CSOUND *, void *)) & la_i_mr_set_t::init_,
4120 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4121 status |= csound->AppendOpcode(
4122 csound, "la_k_mr_set", sizeof(la_k_mr_set_t), 0, 3, "i", "kkk",
4123 (int (*)(CSOUND *, void *)) & la_k_mr_set_t::init_,
4124 (int (*)(CSOUND *, void *)) & la_k_mr_set_t::kontrol_,
4125 (int (*)(CSOUND *, void *))0);
4126 status |= csound->AppendOpcode(
4127 csound, "la_i_mc_set", sizeof(la_i_mc_set_t), 0, 1, "i", "iiii",
4128 (int (*)(CSOUND *, void *)) & la_i_mc_set_t::init_,
4129 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4130 status |= csound->AppendOpcode(
4131 csound, "la_k_mc_set", sizeof(la_k_mc_set_t), 0, 3, "i", "kkkk",
4132 (int (*)(CSOUND *, void *)) & la_k_mc_set_t::init_,
4133 (int (*)(CSOUND *, void *)) & la_k_mc_set_t::kontrol_,
4134 (int (*)(CSOUND *, void *))0);
4135
4136 status |= csound->AppendOpcode(
4137 csound, "la_i_get_vr", sizeof(la_i_get_vr_t), 0, 1, "i", "ii",
4138 (int (*)(CSOUND *, void *)) & la_i_get_vr_t::init_,
4139 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4140 status |= csound->AppendOpcode(
4141 csound, "la_k_get_vr", sizeof(la_k_get_vr_t), 0, 3, "k", "ik",
4142 (int (*)(CSOUND *, void *)) & la_k_get_vr_t::init_,
4143 (int (*)(CSOUND *, void *)) & la_k_get_vr_t::kontrol_,
4144 (int (*)(CSOUND *, void *))0);
4145 status |= csound->AppendOpcode(
4146 csound, "la_i_get_vc", sizeof(la_i_get_vc_t), 0, 1, "ii", "ii",
4147 (int (*)(CSOUND *, void *)) & la_i_get_vc_t::init_,
4148 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4149 status |= csound->AppendOpcode(
4150 csound, "la_k_get_vc", sizeof(la_k_get_vc_t), 0, 3, "kk", "ik",
4151 (int (*)(CSOUND *, void *)) & la_k_get_vc_t::init_,
4152 (int (*)(CSOUND *, void *)) & la_k_get_vc_t::kontrol_,
4153 (int (*)(CSOUND *, void *))0);
4154 status |= csound->AppendOpcode(
4155 csound, "la_i_get_mr", sizeof(la_i_get_mr_t), 0, 1, "i", "iii",
4156 (int (*)(CSOUND *, void *)) & la_i_get_mr_t::init_,
4157 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4158 status |= csound->AppendOpcode(
4159 csound, "la_k_get_mr", sizeof(la_k_get_mr_t), 0, 3, "k", "ikk",
4160 (int (*)(CSOUND *, void *)) & la_k_get_mr_t::init_,
4161 (int (*)(CSOUND *, void *)) & la_k_get_mr_t::kontrol_,
4162 (int (*)(CSOUND *, void *))0);
4163 status |= csound->AppendOpcode(
4164 csound, "la_i_get_mc", sizeof(la_i_get_mc_t), 0, 1, "ii", "iii",
4165 (int (*)(CSOUND *, void *)) & la_i_get_mc_t::init_,
4166 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4167 status |= csound->AppendOpcode(
4168 csound, "la_k_get_mc", sizeof(la_k_get_mc_t), 0, 3, "kk", "ikk",
4169 (int (*)(CSOUND *, void *)) & la_k_get_mc_t::init_,
4170 (int (*)(CSOUND *, void *)) & la_k_get_mc_t::kontrol_,
4171 (int (*)(CSOUND *, void *))0);
4172 status |= csound->AppendOpcode(
4173 csound, "la_i_transpose_mr", sizeof(la_i_transpose_mr_t), 0, 1, "i", "i",
4174 (int (*)(CSOUND *, void *)) & la_i_transpose_mr_t::init_,
4175 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4176 status |= csound->AppendOpcode(
4177 csound, "la_i_transpose_mr", sizeof(la_k_transpose_mr_t), 0, 3, "i", "k",
4178 (int (*)(CSOUND *, void *)) & la_k_transpose_mr_t::init_,
4179 (int (*)(CSOUND *, void *)) & la_k_transpose_mr_t::kontrol_,
4180 (int (*)(CSOUND *, void *))0);
4181 status |= csound->AppendOpcode(
4182 csound, "la_i_transpose_mc", sizeof(la_i_transpose_mc_t), 0, 1, "i", "i",
4183 (int (*)(CSOUND *, void *)) & la_i_transpose_mc_t::init_,
4184 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4185 status |= csound->AppendOpcode(
4186 csound, "la_i_transpose_mc", sizeof(la_k_transpose_mc_t), 0, 2, "i", "i",
4187 (int (*)(CSOUND *, void *)) & la_k_transpose_mc_t::init_,
4188 (int (*)(CSOUND *, void *)) & la_k_transpose_mc_t::kontrol_,
4189 (int (*)(CSOUND *, void *))0);
4190 status |= csound->AppendOpcode(
4191 csound, "la_i_conjugate_vr", sizeof(la_i_conjugate_vr_t), 0, 1, "i", "i",
4192 (int (*)(CSOUND *, void *)) & la_i_conjugate_vr_t::init_,
4193 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4194 status |= csound->AppendOpcode(
4195 csound, "la_k_conjugate_vr", sizeof(la_k_conjugate_vr_t), 0, 3, "i", "i",
4196 (int (*)(CSOUND *, void *)) & la_k_conjugate_vr_t::init_,
4197 (int (*)(CSOUND *, void *)) & la_k_conjugate_vr_t::kontrol_,
4198 (int (*)(CSOUND *, void *))0);
4199 status |= csound->AppendOpcode(
4200 csound, "la_i_conjugate_vc", sizeof(la_i_conjugate_vc_t), 0, 1, "i", "i",
4201 (int (*)(CSOUND *, void *)) & la_i_conjugate_vc_t::init_,
4202 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4203 status |= csound->AppendOpcode(
4204 csound, "la_k_conjugate_vc", sizeof(la_k_conjugate_vc_t), 0, 3, "i", "i",
4205 (int (*)(CSOUND *, void *)) & la_k_conjugate_vc_t::init_,
4206 (int (*)(CSOUND *, void *)) & la_k_conjugate_vc_t::kontrol_,
4207 (int (*)(CSOUND *, void *))0);
4208 status |= csound->AppendOpcode(
4209 csound, "la_i_conjugate_mr", sizeof(la_i_conjugate_mr_t), 0, 1, "i", "i",
4210 (int (*)(CSOUND *, void *)) & la_i_conjugate_mr_t::init_,
4211 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4212 status |= csound->AppendOpcode(
4213 csound, "la_k_conjugate_mr", sizeof(la_k_conjugate_mr_t), 0, 3, "i", "i",
4214 (int (*)(CSOUND *, void *)) & la_k_conjugate_mr_t::init_,
4215 (int (*)(CSOUND *, void *)) & la_k_conjugate_mr_t::kontrol_,
4216 (int (*)(CSOUND *, void *))0);
4217 status |= csound->AppendOpcode(
4218 csound, "la_i_conjugate_mc", sizeof(la_i_conjugate_mc_t), 0, 1, "i", "i",
4219 (int (*)(CSOUND *, void *)) & la_i_conjugate_mc_t::init_,
4220 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4221 status |= csound->AppendOpcode(
4222 csound, "la_k_conjugate_mc", sizeof(la_k_conjugate_mc_t), 0, 3, "i", "i",
4223 (int (*)(CSOUND *, void *)) & la_k_conjugate_mc_t::init_,
4224 (int (*)(CSOUND *, void *)) & la_k_conjugate_mc_t::kontrol_,
4225 (int (*)(CSOUND *, void *))0);
4226 status |= csound->AppendOpcode(
4227 csound, "la_i_norm1_vr", sizeof(la_i_norm1_vr_t), 0, 1, "i", "i",
4228 (int (*)(CSOUND *, void *)) & la_i_norm1_vr_t::init_,
4229 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4230 status |= csound->AppendOpcode(
4231 csound, "la_k_norm1_vr", sizeof(la_k_norm1_vr_t), 0, 3, "k", "i",
4232 (int (*)(CSOUND *, void *)) & la_k_norm1_vr_t::init_,
4233 (int (*)(CSOUND *, void *)) & la_k_norm1_vr_t::kontrol_,
4234 (int (*)(CSOUND *, void *))0);
4235 status |= csound->AppendOpcode(
4236 csound, "la_i_norm1_vc", sizeof(la_i_norm1_vc_t), 0, 1, "i", "i",
4237 (int (*)(CSOUND *, void *)) & la_i_norm1_vc_t::init_,
4238 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4239 status |= csound->AppendOpcode(
4240 csound, "la_k_norm1_vc", sizeof(la_k_norm1_vc_t), 0, 3, "k", "i",
4241 (int (*)(CSOUND *, void *)) & la_k_norm1_vc_t::init_,
4242 (int (*)(CSOUND *, void *)) & la_k_norm1_vc_t::kontrol_,
4243 (int (*)(CSOUND *, void *))0);
4244 status |= csound->AppendOpcode(
4245 csound, "la_i_norm1_mr", sizeof(la_i_norm1_mr_t), 0, 1, "i", "i",
4246 (int (*)(CSOUND *, void *)) & la_i_norm1_mr_t::init_,
4247 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4248 status |= csound->AppendOpcode(
4249 csound, "la_k_norm1_mr", sizeof(la_k_norm1_mr_t), 0, 3, "k", "i",
4250 (int (*)(CSOUND *, void *)) & la_k_norm1_mr_t::init_,
4251 (int (*)(CSOUND *, void *)) & la_k_norm1_mr_t::kontrol_,
4252 (int (*)(CSOUND *, void *))0);
4253 status |= csound->AppendOpcode(
4254 csound, "la_i_norm1_mc", sizeof(la_i_norm1_mc_t), 0, 1, "i", "i",
4255 (int (*)(CSOUND *, void *)) & la_i_norm1_mc_t::init_,
4256 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4257 status |= csound->AppendOpcode(
4258 csound, "la_k_norm1_mc", sizeof(la_k_norm1_mc_t), 0, 3, "k", "i",
4259 (int (*)(CSOUND *, void *)) & la_k_norm1_mc_t::init_,
4260 (int (*)(CSOUND *, void *)) & la_k_norm1_mc_t::kontrol_,
4261 (int (*)(CSOUND *, void *))0);
4262 status |= csound->AppendOpcode(
4263 csound, "la_i_norm_euclid_vr", sizeof(la_i_norm_euclid_vr_t), 0, 1, "i",
4264 "i", (int (*)(CSOUND *, void *)) & la_i_norm_euclid_vr_t::init_,
4265 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4266 status |= csound->AppendOpcode(
4267 csound, "la_k_norm_euclid_vr", sizeof(la_k_norm_euclid_vr_t), 0, 3, "k",
4268 "i", (int (*)(CSOUND *, void *)) & la_k_norm_euclid_vr_t::init_,
4269 (int (*)(CSOUND *, void *)) & la_k_norm_euclid_vr_t::kontrol_,
4270 (int (*)(CSOUND *, void *))0);
4271 status |= csound->AppendOpcode(
4272 csound, "la_i_norm_euclid_vc", sizeof(la_i_norm_euclid_vc_t), 0, 1, "i",
4273 "i", (int (*)(CSOUND *, void *)) & la_i_norm_euclid_vc_t::init_,
4274 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4275 status |= csound->AppendOpcode(
4276 csound, "la_k_norm_euclid_vc", sizeof(la_k_norm_euclid_vc_t), 0, 3, "k",
4277 "i", (int (*)(CSOUND *, void *)) & la_k_norm_euclid_vc_t::init_,
4278 (int (*)(CSOUND *, void *)) & la_k_norm_euclid_vc_t::kontrol_,
4279 (int (*)(CSOUND *, void *))0);
4280 status |= csound->AppendOpcode(
4281 csound, "la_i_norm_euclid_mr", sizeof(la_i_norm_euclid_mr_t), 0, 1, "i",
4282 "i", (int (*)(CSOUND *, void *)) & la_i_norm_euclid_mr_t::init_,
4283 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4284 status |= csound->AppendOpcode(
4285 csound, "la_k_norm_euclid_mr", sizeof(la_k_norm_euclid_mr_t), 0, 3, "k",
4286 "i", (int (*)(CSOUND *, void *)) & la_k_norm_euclid_mr_t::init_,
4287 (int (*)(CSOUND *, void *)) & la_k_norm_euclid_mr_t::kontrol_,
4288 (int (*)(CSOUND *, void *))0);
4289 status |= csound->AppendOpcode(
4290 csound, "la_i_norm_euclid_mc", sizeof(la_i_norm_euclid_mc_t), 0, 1, "i",
4291 "i", (int (*)(CSOUND *, void *)) & la_i_norm_euclid_mc_t::init_,
4292 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4293 status |= csound->AppendOpcode(
4294 csound, "la_k_norm_euclid_mc", sizeof(la_k_norm_euclid_mc_t), 0, 3, "k",
4295 "i", (int (*)(CSOUND *, void *)) & la_k_norm_euclid_mc_t::init_,
4296 (int (*)(CSOUND *, void *)) & la_k_norm_euclid_mc_t::kontrol_,
4297 (int (*)(CSOUND *, void *))0);
4298 status |= csound->AppendOpcode(
4299 csound, "la_i_distance_vr", sizeof(la_i_distance_vr_t), 0, 1, "i", "ii",
4300 (int (*)(CSOUND *, void *)) & la_i_distance_vr_t::init_,
4301 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4302 status |= csound->AppendOpcode(
4303 csound, "la_k_distance_vr", sizeof(la_k_distance_vr_t), 0, 3, "k", "ii",
4304 (int (*)(CSOUND *, void *)) & la_k_distance_vr_t::init_,
4305 (int (*)(CSOUND *, void *)) & la_k_distance_vr_t::kontrol_,
4306 (int (*)(CSOUND *, void *))0);
4307 status |= csound->AppendOpcode(
4308 csound, "la_i_distance_vc", sizeof(la_i_distance_vc_t), 0, 1, "i", "ii",
4309 (int (*)(CSOUND *, void *)) & la_i_distance_vc_t::init_,
4310 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4311 status |= csound->AppendOpcode(
4312 csound, "la_k_distance_vc", sizeof(la_k_distance_vc_t), 0, 3, "k", "ii",
4313 (int (*)(CSOUND *, void *)) & la_k_distance_vc_t::init_,
4314 (int (*)(CSOUND *, void *)) & la_k_distance_vc_t::kontrol_,
4315 (int (*)(CSOUND *, void *))0);
4316 status |= csound->AppendOpcode(
4317 csound, "la_i_norm_max_mr", sizeof(la_i_norm_max_mr_t), 0, 1, "i", "i",
4318 (int (*)(CSOUND *, void *)) & la_i_norm_max_mr_t::init_,
4319 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4320 status |= csound->AppendOpcode(
4321 csound, "la_k_norm_max_mr", sizeof(la_k_norm_max_mr_t), 0, 3, "k", "i",
4322 (int (*)(CSOUND *, void *)) & la_k_norm_max_mr_t::init_,
4323 (int (*)(CSOUND *, void *)) & la_k_norm_max_mr_t::kontrol_,
4324 (int (*)(CSOUND *, void *))0);
4325 status |= csound->AppendOpcode(
4326 csound, "la_i_norm_max_mc", sizeof(la_i_norm_max_mc_t), 0, 1, "i", "i",
4327 (int (*)(CSOUND *, void *)) & la_i_norm_max_mc_t::init_,
4328 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4329 status |= csound->AppendOpcode(
4330 csound, "la_k_norm_max_mc", sizeof(la_k_norm_max_mc_t), 0, 3, "k", "i",
4331 (int (*)(CSOUND *, void *)) & la_k_norm_max_mc_t::init_,
4332 (int (*)(CSOUND *, void *)) & la_k_norm_max_mc_t::kontrol_,
4333 (int (*)(CSOUND *, void *))0);
4334 status |= csound->AppendOpcode(
4335 csound, "la_i_norm_inf_vr", sizeof(la_i_norm_inf_vr_t), 0, 1, "i", "i",
4336 (int (*)(CSOUND *, void *)) & la_i_norm_inf_vr_t::init_,
4337 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4338 status |= csound->AppendOpcode(
4339 csound, "la_k_norm_inf_vr", sizeof(la_k_norm_inf_vr_t), 0, 3, "k", "i",
4340 (int (*)(CSOUND *, void *)) & la_k_norm_inf_vr_t::init_,
4341 (int (*)(CSOUND *, void *)) & la_k_norm_inf_vr_t::kontrol_,
4342 (int (*)(CSOUND *, void *))0);
4343 status |= csound->AppendOpcode(
4344 csound, "la_i_norm_inf_vc", sizeof(la_i_norm_inf_vc_t), 0, 1, "i", "i",
4345 (int (*)(CSOUND *, void *)) & la_i_norm_inf_vc_t::init_,
4346 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4347 status |= csound->AppendOpcode(
4348 csound, "la_k_norm_inf_vc", sizeof(la_k_norm_inf_vc_t), 0, 3, "k", "i",
4349 (int (*)(CSOUND *, void *)) & la_k_norm_inf_vc_t::init_,
4350 (int (*)(CSOUND *, void *)) & la_k_norm_inf_vc_t::kontrol_,
4351 (int (*)(CSOUND *, void *))0);
4352 status |= csound->AppendOpcode(
4353 csound, "la_i_norm_inf_mr", sizeof(la_i_norm_inf_mr_t), 0, 1, "i", "i",
4354 (int (*)(CSOUND *, void *)) & la_i_norm_inf_mr_t::init_,
4355 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4356 status |= csound->AppendOpcode(
4357 csound, "la_k_norm_inf_mr", sizeof(la_k_norm_inf_mr_t), 0, 3, "k", "i",
4358 (int (*)(CSOUND *, void *)) & la_k_norm_inf_mr_t::init_,
4359 (int (*)(CSOUND *, void *)) & la_k_norm_inf_mr_t::kontrol_,
4360 (int (*)(CSOUND *, void *))0);
4361 status |= csound->AppendOpcode(
4362 csound, "la_i_norm_inf_mc", sizeof(la_i_norm_inf_mc_t), 0, 1, "i", "i",
4363 (int (*)(CSOUND *, void *)) & la_i_norm_inf_mc_t::init_,
4364 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4365 status |= csound->AppendOpcode(
4366 csound, "la_k_norm_inf_mc", sizeof(la_k_norm_inf_mc_t), 0, 3, "k", "i",
4367 (int (*)(CSOUND *, void *)) & la_k_norm_inf_mc_t::init_,
4368 (int (*)(CSOUND *, void *)) & la_k_norm_inf_mc_t::kontrol_,
4369 (int (*)(CSOUND *, void *))0);
4370 status |= csound->AppendOpcode(
4371 csound, "la_i_trace_mr", sizeof(la_i_trace_mr_t), 0, 1, "i", "i",
4372 (int (*)(CSOUND *, void *)) & la_i_trace_mr_t::init_,
4373 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4374 status |= csound->AppendOpcode(
4375 csound, "la_k_trace_mr", sizeof(la_k_trace_mr_t), 0, 3, "k", "i",
4376 (int (*)(CSOUND *, void *)) & la_k_trace_mr_t::init_,
4377 (int (*)(CSOUND *, void *)) & la_k_trace_mr_t::kontrol_,
4378 (int (*)(CSOUND *, void *))0);
4379 status |= csound->AppendOpcode(
4380 csound, "la_i_trace_mc", sizeof(la_i_trace_mc_t), 0, 1, "ii", "i",
4381 (int (*)(CSOUND *, void *)) & la_i_trace_mc_t::init_,
4382 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4383 status |= csound->AppendOpcode(
4384 csound, "la_k_trace_mc", sizeof(la_k_trace_mc_t), 0, 3, "kk", "i",
4385 (int (*)(CSOUND *, void *)) & la_k_trace_mc_t::init_,
4386 (int (*)(CSOUND *, void *)) & la_k_trace_mc_t::kontrol_,
4387 (int (*)(CSOUND *, void *))0);
4388 status |= csound->AppendOpcode(
4389 csound, "la_i_lu_det_mr", sizeof(la_i_lu_det_mr_t), 0, 1, "i", "i",
4390 (int (*)(CSOUND *, void *)) & la_i_lu_det_mr_t::init_,
4391 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4392 status |= csound->AppendOpcode(
4393 csound, "la_k_lu_det_mr", sizeof(la_k_lu_det_mr_t), 0, 3, "k", "i",
4394 (int (*)(CSOUND *, void *)) & la_k_lu_det_mr_t::init_,
4395 (int (*)(CSOUND *, void *)) & la_k_lu_det_mr_t::kontrol_,
4396 (int (*)(CSOUND *, void *))0);
4397 status |= csound->AppendOpcode(
4398 csound, "la_i_lu_det_mc", sizeof(la_i_lu_det_mc_t), 0, 1, "ii", "i",
4399 (int (*)(CSOUND *, void *)) & la_i_lu_det_mc_t::init_,
4400 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4401 status |= csound->AppendOpcode(
4402 csound, "la_k_lu_det_mc", sizeof(la_k_lu_det_mc_t), 0, 3, "kk", "i",
4403 (int (*)(CSOUND *, void *)) & la_k_lu_det_mc_t::init_,
4404 (int (*)(CSOUND *, void *)) & la_k_lu_det_mc_t::kontrol_,
4405 (int (*)(CSOUND *, void *))0);
4406 status |= csound->AppendOpcode(
4407 csound, "la_i_add_vr", sizeof(la_i_add_vr_t), 0, 1, "i", "ii",
4408 (int (*)(CSOUND *, void *)) & la_i_add_vr_t::init_,
4409 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4410 status |= csound->AppendOpcode(
4411 csound, "la_k_add_vr", sizeof(la_k_add_vr_t), 0, 3, "i", "ii",
4412 (int (*)(CSOUND *, void *)) & la_k_add_vr_t::init_,
4413 (int (*)(CSOUND *, void *)) & la_k_add_vr_t::kontrol_,
4414 (int (*)(CSOUND *, void *))0);
4415 status |= csound->AppendOpcode(
4416 csound, "la_i_add_vc", sizeof(la_i_add_vc_t), 0, 1, "i", "ii",
4417 (int (*)(CSOUND *, void *)) & la_i_add_vc_t::init_,
4418 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4419 status |= csound->AppendOpcode(
4420 csound, "la_k_add_vc", sizeof(la_k_add_vc_t), 0, 3, "i", "ii",
4421 (int (*)(CSOUND *, void *)) & la_k_add_vc_t::init_,
4422 (int (*)(CSOUND *, void *)) & la_k_add_vc_t::kontrol_,
4423 (int (*)(CSOUND *, void *))0);
4424 status |= csound->AppendOpcode(
4425 csound, "la_i_add_mr", sizeof(la_i_add_mr_t), 0, 1, "i", "ii",
4426 (int (*)(CSOUND *, void *)) & la_i_add_mr_t::init_,
4427 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4428 status |= csound->AppendOpcode(
4429 csound, "la_k_add_mr", sizeof(la_k_add_mr_t), 0, 3, "i", "ii",
4430 (int (*)(CSOUND *, void *)) & la_k_add_mr_t::init_,
4431 (int (*)(CSOUND *, void *)) & la_k_add_mr_t::kontrol_,
4432 (int (*)(CSOUND *, void *))0);
4433 status |= csound->AppendOpcode(
4434 csound, "la_i_add_mc", sizeof(la_i_add_mc_t), 0, 1, "i", "ii",
4435 (int (*)(CSOUND *, void *)) & la_i_add_mc_t::init_,
4436 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4437 status |= csound->AppendOpcode(
4438 csound, "la_k_add_mc", sizeof(la_k_add_mc_t), 0, 3, "i", "ii",
4439 (int (*)(CSOUND *, void *)) & la_k_add_mc_t::init_,
4440 (int (*)(CSOUND *, void *)) & la_k_add_mc_t::kontrol_,
4441 (int (*)(CSOUND *, void *))0);
4442 status |= csound->AppendOpcode(
4443 csound, "la_i_subtract_vr", sizeof(la_i_subtract_vr_t), 0, 1, "i", "ii",
4444 (int (*)(CSOUND *, void *)) & la_i_subtract_vr_t::init_,
4445 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4446 status |= csound->AppendOpcode(
4447 csound, "la_k_subtract_vr", sizeof(la_k_subtract_vr_t), 0, 3, "i", "ii",
4448 (int (*)(CSOUND *, void *)) & la_k_subtract_vr_t::init_,
4449 (int (*)(CSOUND *, void *)) & la_k_subtract_vr_t::kontrol_,
4450 (int (*)(CSOUND *, void *))0);
4451 status |= csound->AppendOpcode(
4452 csound, "la_i_subtract_vc", sizeof(la_i_subtract_vc_t), 0, 1, "i", "ii",
4453 (int (*)(CSOUND *, void *)) & la_i_subtract_vc_t::init_,
4454 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4455 status |= csound->AppendOpcode(
4456 csound, "la_k_subtract_vc", sizeof(la_k_subtract_vc_t), 0, 3, "i", "ii",
4457 (int (*)(CSOUND *, void *)) & la_k_subtract_vc_t::init_,
4458 (int (*)(CSOUND *, void *)) & la_k_subtract_vc_t::kontrol_,
4459 (int (*)(CSOUND *, void *))0);
4460 status |= csound->AppendOpcode(
4461 csound, "la_i_subtract_mr", sizeof(la_i_subtract_mr_t), 0, 1, "i", "ii",
4462 (int (*)(CSOUND *, void *)) & la_i_subtract_mr_t::init_,
4463 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4464 status |= csound->AppendOpcode(
4465 csound, "la_k_subtract_mr", sizeof(la_k_subtract_mr_t), 0, 3, "i", "ii",
4466 (int (*)(CSOUND *, void *)) & la_k_subtract_mr_t::init_,
4467 (int (*)(CSOUND *, void *)) & la_k_subtract_mr_t::kontrol_,
4468 (int (*)(CSOUND *, void *))0);
4469 status |= csound->AppendOpcode(
4470 csound, "la_i_subtract_mc", sizeof(la_i_subtract_mc_t), 0, 1, "i", "ii",
4471 (int (*)(CSOUND *, void *)) & la_i_subtract_mc_t::init_,
4472 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4473 status |= csound->AppendOpcode(
4474 csound, "la_k_subtract_mc", sizeof(la_k_subtract_mc_t), 0, 3, "i", "ii",
4475 (int (*)(CSOUND *, void *)) & la_k_subtract_mc_t::init_,
4476 (int (*)(CSOUND *, void *)) & la_k_subtract_mc_t::kontrol_,
4477 (int (*)(CSOUND *, void *))0);
4478 status |= csound->AppendOpcode(
4479 csound, "la_i_multiply_vr", sizeof(la_i_multiply_vr_t), 0, 1, "i", "ii",
4480 (int (*)(CSOUND *, void *)) & la_i_multiply_vr_t::init_,
4481 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4482 status |= csound->AppendOpcode(
4483 csound, "la_k_multiply_vr", sizeof(la_k_multiply_vr_t), 0, 3, "i", "ii",
4484 (int (*)(CSOUND *, void *)) & la_k_multiply_vr_t::init_,
4485 (int (*)(CSOUND *, void *)) & la_k_multiply_vr_t::kontrol_,
4486 (int (*)(CSOUND *, void *))0);
4487 status |= csound->AppendOpcode(
4488 csound, "la_i_multiply_vc", sizeof(la_i_multiply_vc_t), 0, 1, "i", "ii",
4489 (int (*)(CSOUND *, void *)) & la_i_multiply_vc_t::init_,
4490 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4491 status |= csound->AppendOpcode(
4492 csound, "la_k_multiply_vc", sizeof(la_k_multiply_vc_t), 0, 3, "i", "ii",
4493 (int (*)(CSOUND *, void *)) & la_k_multiply_vc_t::init_,
4494 (int (*)(CSOUND *, void *)) & la_k_multiply_vc_t::kontrol_,
4495 (int (*)(CSOUND *, void *))0);
4496 status |= csound->AppendOpcode(
4497 csound, "la_i_multiply_mr", sizeof(la_i_multiply_mr_t), 0, 1, "i", "ii",
4498 (int (*)(CSOUND *, void *)) & la_i_multiply_mr_t::init_,
4499 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4500 status |= csound->AppendOpcode(
4501 csound, "la_k_multiply_mr", sizeof(la_k_multiply_mr_t), 0, 3, "i", "ii",
4502 (int (*)(CSOUND *, void *)) & la_k_multiply_mr_t::init_,
4503 (int (*)(CSOUND *, void *)) & la_k_multiply_mr_t::kontrol_,
4504 (int (*)(CSOUND *, void *))0);
4505 status |= csound->AppendOpcode(
4506 csound, "la_i_multiply_mc", sizeof(la_i_multiply_mc_t), 0, 1, "i", "ii",
4507 (int (*)(CSOUND *, void *)) & la_i_multiply_mc_t::init_,
4508 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4509 status |= csound->AppendOpcode(
4510 csound, "la_k_multiply_mc", sizeof(la_k_multiply_mc_t), 0, 3, "i", "ii",
4511 (int (*)(CSOUND *, void *)) & la_k_multiply_mc_t::init_,
4512 (int (*)(CSOUND *, void *)) & la_k_multiply_mc_t::kontrol_,
4513 (int (*)(CSOUND *, void *))0);
4514
4515 status |= csound->AppendOpcode(
4516 csound, "la_i_divide_vr", sizeof(la_i_divide_vr_t), 0, 1, "i", "ii",
4517 (int (*)(CSOUND *, void *)) & la_i_divide_vr_t::init_,
4518 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4519 status |= csound->AppendOpcode(
4520 csound, "la_k_divide_vr", sizeof(la_k_divide_vr_t), 0, 3, "i", "ii",
4521 (int (*)(CSOUND *, void *)) & la_k_divide_vr_t::init_,
4522 (int (*)(CSOUND *, void *)) & la_k_divide_vr_t::kontrol_,
4523 (int (*)(CSOUND *, void *))0);
4524 status |= csound->AppendOpcode(
4525 csound, "la_i_divide_vc", sizeof(la_i_divide_vc_t), 0, 1, "i", "ii",
4526 (int (*)(CSOUND *, void *)) & la_i_divide_vc_t::init_,
4527 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4528 status |= csound->AppendOpcode(
4529 csound, "la_k_divide_vc", sizeof(la_k_divide_vc_t), 0, 3, "i", "kk",
4530 (int (*)(CSOUND *, void *)) & la_k_divide_vc_t::init_,
4531 (int (*)(CSOUND *, void *)) & la_k_divide_vc_t::kontrol_,
4532 (int (*)(CSOUND *, void *))0);
4533 status |= csound->AppendOpcode(
4534 csound, "la_i_divide_mr", sizeof(la_i_divide_mr_t), 0, 1, "i", "ii",
4535 (int (*)(CSOUND *, void *)) & la_i_divide_mr_t::init_,
4536 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4537 status |= csound->AppendOpcode(
4538 csound, "la_k_divide_mr", sizeof(la_k_divide_mr_t), 0, 3, "i", "ii",
4539 (int (*)(CSOUND *, void *)) & la_k_divide_mr_t::init_,
4540 (int (*)(CSOUND *, void *)) & la_k_divide_mr_t::kontrol_,
4541 (int (*)(CSOUND *, void *))0);
4542 status |= csound->AppendOpcode(
4543 csound, "la_i_divide_mc", sizeof(la_i_divide_mc_t), 0, 1, "i", "ii",
4544 (int (*)(CSOUND *, void *)) & la_i_divide_mc_t::init_,
4545 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4546 status |= csound->AppendOpcode(
4547 csound, "la_k_divide_mc", sizeof(la_k_divide_mc_t), 0, 3, "i", "ii",
4548 (int (*)(CSOUND *, void *)) & la_k_divide_mc_t::init_,
4549 (int (*)(CSOUND *, void *)) & la_k_divide_mc_t::kontrol_,
4550 (int (*)(CSOUND *, void *))0);
4551 status |= csound->AppendOpcode(
4552 csound, "la_i_dot_vr", sizeof(la_i_dot_vr_t), 0, 1, "i", "ii",
4553 (int (*)(CSOUND *, void *)) & la_i_dot_vr_t::init_,
4554 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4555 status |= csound->AppendOpcode(
4556 csound, "la_k_dot_vr", sizeof(la_k_dot_vr_t), 0, 3, "i", "ii",
4557 (int (*)(CSOUND *, void *)) & la_k_dot_vr_t::init_,
4558 (int (*)(CSOUND *, void *)) & la_k_dot_vr_t::kontrol_,
4559 (int (*)(CSOUND *, void *))0);
4560 status |= csound->AppendOpcode(
4561 csound, "la_i_dot_vc", sizeof(la_i_dot_vc_t), 0, 1, "ii", "ii",
4562 (int (*)(CSOUND *, void *)) & la_i_dot_vc_t::init_,
4563 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4564 status |= csound->AppendOpcode(
4565 csound, "la_k_dot_vc", sizeof(la_k_dot_vc_t), 0, 3, "ii", "ii",
4566 (int (*)(CSOUND *, void *)) & la_k_dot_vc_t::init_,
4567 (int (*)(CSOUND *, void *)) & la_k_dot_vc_t::kontrol_,
4568 (int (*)(CSOUND *, void *))0);
4569 status |= csound->AppendOpcode(
4570 csound, "la_i_dot_mr", sizeof(la_i_dot_mr_t), 0, 1, "i", "ii",
4571 (int (*)(CSOUND *, void *)) & la_i_dot_mr_t::init_,
4572 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4573 status |= csound->AppendOpcode(
4574 csound, "la_k_dot_mr", sizeof(la_k_dot_mr_t), 0, 3, "i", "ii",
4575 (int (*)(CSOUND *, void *)) & la_k_dot_mr_t::init_,
4576 (int (*)(CSOUND *, void *)) & la_k_dot_mr_t::kontrol_,
4577 (int (*)(CSOUND *, void *))0);
4578 status |= csound->AppendOpcode(
4579 csound, "la_i_dot_mc", sizeof(la_i_dot_mc_t), 0, 1, "i", "ii",
4580 (int (*)(CSOUND *, void *)) & la_i_dot_mc_t::init_,
4581 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4582 status |= csound->AppendOpcode(
4583 csound, "la_k_dot_mc", sizeof(la_k_dot_mc_t), 0, 3, "i", "ii",
4584 (int (*)(CSOUND *, void *)) & la_k_dot_mc_t::init_,
4585 (int (*)(CSOUND *, void *)) & la_k_dot_mc_t::kontrol_,
4586 (int (*)(CSOUND *, void *))0);
4587 status |= csound->AppendOpcode(
4588 csound, "la_i_dot_mr_vr", sizeof(la_i_dot_mr_vr_t), 0, 1, "i", "ii",
4589 (int (*)(CSOUND *, void *)) & la_i_dot_mr_vr_t::init_,
4590 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4591 status |= csound->AppendOpcode(
4592 csound, "la_k_dot_mr_vr", sizeof(la_k_dot_mr_vr_t), 0, 3, "i", "ii",
4593 (int (*)(CSOUND *, void *)) & la_k_dot_mr_vr_t::init_,
4594 (int (*)(CSOUND *, void *)) & la_k_dot_mr_vr_t::kontrol_,
4595 (int (*)(CSOUND *, void *))0);
4596 status |= csound->AppendOpcode(
4597 csound, "la_i_dot_mc_vc", sizeof(la_i_dot_mc_vc_t), 0, 1, "i", "ii",
4598 (int (*)(CSOUND *, void *)) & la_i_dot_mc_vc_t::init_,
4599 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4600 status |= csound->AppendOpcode(
4601 csound, "la_k_dot_mc_vc", sizeof(la_k_dot_mc_vc_t), 0, 3, "i", "ii",
4602 (int (*)(CSOUND *, void *)) & la_k_dot_mc_vc_t::init_,
4603 (int (*)(CSOUND *, void *)) & la_k_dot_mc_vc_t::kontrol_,
4604 (int (*)(CSOUND *, void *))0);
4605 status |= csound->AppendOpcode(
4606 csound, "la_i_invert_mr", sizeof(la_i_invert_mr_t), 0, 1, "ii", "i",
4607 (int (*)(CSOUND *, void *)) & la_i_invert_mr_t::init_,
4608 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4609 status |= csound->AppendOpcode(
4610 csound, "la_k_invert_mr", sizeof(la_k_invert_mr_t), 0, 3, "ik", "i",
4611 (int (*)(CSOUND *, void *)) & la_k_invert_mr_t::init_,
4612 (int (*)(CSOUND *, void *)) & la_k_invert_mr_t::kontrol_,
4613 (int (*)(CSOUND *, void *))0);
4614 status |= csound->AppendOpcode(
4615 csound, "la_i_invert_mc", sizeof(la_i_invert_mc_t), 0, 1, "iii", "i",
4616 (int (*)(CSOUND *, void *)) & la_i_invert_mc_t::init_,
4617 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4618 status |= csound->AppendOpcode(
4619 csound, "la_k_invert_mc", sizeof(la_k_invert_mc_t), 0, 3, "ikk", "i",
4620 (int (*)(CSOUND *, void *)) & la_k_invert_mc_t::init_,
4621 (int (*)(CSOUND *, void *)) & la_k_invert_mc_t::kontrol_,
4622 (int (*)(CSOUND *, void *))0);
4623 status |= csound->AppendOpcode(
4624 csound, "la_i_upper_solve_mr", sizeof(la_i_upper_solve_mr_t), 0, 1, "i",
4625 "io", (int (*)(CSOUND *, void *)) & la_i_upper_solve_mr_t::init_,
4626 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4627 status |= csound->AppendOpcode(
4628 csound, "la_k_upper_solve_mr", sizeof(la_k_upper_solve_mr_t), 0, 3, "i",
4629 "iO", (int (*)(CSOUND *, void *)) & la_k_upper_solve_mr_t::init_,
4630 (int (*)(CSOUND *, void *)) & la_k_upper_solve_mr_t::kontrol_,
4631 (int (*)(CSOUND *, void *))0);
4632 status |= csound->AppendOpcode(
4633 csound, "la_i_upper_solve_mc", sizeof(la_i_upper_solve_mc_t), 0, 1, "i",
4634 "io", (int (*)(CSOUND *, void *)) & la_i_upper_solve_mc_t::init_,
4635 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4636 status |= csound->AppendOpcode(
4637 csound, "la_k_upper_solve_mc", sizeof(la_k_upper_solve_mc_t), 0, 3, "i",
4638 "iO", (int (*)(CSOUND *, void *)) & la_k_upper_solve_mc_t::init_,
4639 (int (*)(CSOUND *, void *)) & la_k_upper_solve_mc_t::kontrol_,
4640 (int (*)(CSOUND *, void *))0);
4641 status |= csound->AppendOpcode(
4642 csound, "la_i_lower_solve_mr", sizeof(la_i_lower_solve_mr_t), 0, 1, "i",
4643 "io", (int (*)(CSOUND *, void *)) & la_i_lower_solve_mr_t::init_,
4644 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4645 status |= csound->AppendOpcode(
4646 csound, "la_k_lower_solve_mr", sizeof(la_k_lower_solve_mr_t), 0, 3, "i",
4647 "iO", (int (*)(CSOUND *, void *)) & la_k_lower_solve_mr_t::init_,
4648 (int (*)(CSOUND *, void *)) & la_k_lower_solve_mr_t::kontrol_,
4649 (int (*)(CSOUND *, void *))0);
4650 status |= csound->AppendOpcode(
4651 csound, "la_i_lower_solve_mc", sizeof(la_i_lower_solve_mc_t), 0, 1, "i",
4652 "io", (int (*)(CSOUND *, void *)) & la_i_lower_solve_mc_t::init_,
4653 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4654 status |= csound->AppendOpcode(
4655 csound, "la_k_lower_solve_mc", sizeof(la_k_lower_solve_mc_t), 0, 3, "i",
4656 "iO", (int (*)(CSOUND *, void *)) & la_k_lower_solve_mc_t::init_,
4657 (int (*)(CSOUND *, void *)) & la_k_lower_solve_mc_t::kontrol_,
4658 (int (*)(CSOUND *, void *))0);
4659 status |= csound->AppendOpcode(
4660 csound, "la_i_lu_factor_mr", sizeof(la_i_lu_factor_mr_t), 0, 1, "iii",
4661 "i", (int (*)(CSOUND *, void *)) & la_i_lu_factor_mr_t::init_,
4662 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4663 status |= csound->AppendOpcode(
4664 csound, "la_k_lu_factor_mr", sizeof(la_k_lu_factor_mr_t), 0, 3, "iik",
4665 "i", (int (*)(CSOUND *, void *)) & la_k_lu_factor_mr_t::init_,
4666 (int (*)(CSOUND *, void *)) & la_k_lu_factor_mr_t::kontrol_,
4667 (int (*)(CSOUND *, void *))0);
4668 status |= csound->AppendOpcode(
4669 csound, "la_i_lu_factor_mc", sizeof(la_i_lu_factor_mc_t), 0, 1, "iii",
4670 "i", (int (*)(CSOUND *, void *)) & la_i_lu_factor_mc_t::init_,
4671 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4672 status |= csound->AppendOpcode(
4673 csound, "la_k_lu_factor_mc", sizeof(la_k_lu_factor_mc_t), 0, 3, "i", "i",
4674 (int (*)(CSOUND *, void *)) & la_k_lu_factor_mc_t::init_,
4675 (int (*)(CSOUND *, void *)) & la_k_lu_factor_mc_t::kontrol_,
4676 (int (*)(CSOUND *, void *))0);
4677 status |= csound->AppendOpcode(
4678 csound, "la_i_lu_solve_mr", sizeof(la_i_lu_solve_mr_t), 0, 1, "i", "ii",
4679 (int (*)(CSOUND *, void *)) & la_i_lu_solve_mr_t::init_,
4680 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4681 status |= csound->AppendOpcode(
4682 csound, "la_k_lu_solve_mr", sizeof(la_k_lu_solve_mr_t), 0, 3, "i", "ii",
4683 (int (*)(CSOUND *, void *)) & la_k_lu_solve_mr_t::init_,
4684 (int (*)(CSOUND *, void *)) & la_k_lu_solve_mr_t::kontrol_,
4685 (int (*)(CSOUND *, void *))0);
4686 status |= csound->AppendOpcode(
4687 csound, "la_i_lu_solve_mc", sizeof(la_i_lu_solve_mc_t), 0, 1, "i", "ii",
4688 (int (*)(CSOUND *, void *)) & la_i_lu_solve_mc_t::init_,
4689 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4690 status |= csound->AppendOpcode(
4691 csound, "la_k_lu_solve_mc", sizeof(la_k_lu_solve_mc_t), 0, 3, "i", "ii",
4692 (int (*)(CSOUND *, void *)) & la_k_lu_solve_mc_t::init_,
4693 (int (*)(CSOUND *, void *)) & la_k_lu_solve_mc_t::kontrol_,
4694 (int (*)(CSOUND *, void *))0);
4695 status |= csound->AppendOpcode(
4696 csound, "la_i_qr_factor_mr", sizeof(la_i_qr_factor_mr_t), 0, 1, "ii", "i",
4697 (int (*)(CSOUND *, void *)) & la_i_qr_factor_mr_t::init_,
4698 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4699 status |= csound->AppendOpcode(
4700 csound, "la_k_qr_factor_mr", sizeof(la_k_qr_factor_mr_t), 0, 3, "ii", "i",
4701 (int (*)(CSOUND *, void *)) & la_k_qr_factor_mr_t::init_,
4702 (int (*)(CSOUND *, void *)) & la_k_qr_factor_mr_t::kontrol_,
4703 (int (*)(CSOUND *, void *))0);
4704 status |= csound->AppendOpcode(
4705 csound, "la_i_qr_factor_mc", sizeof(la_i_qr_factor_mc_t), 0, 1, "ii", "i",
4706 (int (*)(CSOUND *, void *)) & la_i_qr_factor_mc_t::init_,
4707 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4708 status |= csound->AppendOpcode(
4709 csound, "la_k_qr_factor_mc", sizeof(la_k_qr_factor_mc_t), 0, 3, "ii", "i",
4710 (int (*)(CSOUND *, void *)) & la_k_qr_factor_mc_t::init_,
4711 (int (*)(CSOUND *, void *)) & la_k_qr_factor_mc_t::kontrol_,
4712 (int (*)(CSOUND *, void *))0);
4713 status |= csound->AppendOpcode(
4714 csound, "la_i_qr_eigen_mr", sizeof(la_i_qr_eigen_mr_t), 0, 1, "i", "ii",
4715 (int (*)(CSOUND *, void *)) & la_i_qr_eigen_mr_t::init_,
4716 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4717 status |= csound->AppendOpcode(
4718 csound, "la_k_qr_eigen_mr", sizeof(la_k_qr_eigen_mr_t), 0, 3, "i", "ik",
4719 (int (*)(CSOUND *, void *)) & la_k_qr_eigen_mr_t::init_,
4720 (int (*)(CSOUND *, void *)) & la_k_qr_eigen_mr_t::kontrol_,
4721 (int (*)(CSOUND *, void *))0);
4722 status |= csound->AppendOpcode(
4723 csound, "la_i_qr_eigen_mc", sizeof(la_i_qr_eigen_mc_t), 0, 1, "i", "ii",
4724 (int (*)(CSOUND *, void *)) & la_i_qr_eigen_mc_t::init_,
4725 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4726 status |= csound->AppendOpcode(
4727 csound, "la_k_qr_eigen_mc", sizeof(la_k_qr_eigen_mc_t), 0, 3, "i", "ik",
4728 (int (*)(CSOUND *, void *)) & la_k_qr_eigen_mc_t::init_,
4729 (int (*)(CSOUND *, void *)) & la_k_qr_eigen_mc_t::kontrol_,
4730 (int (*)(CSOUND *, void *))0);
4731 status |= csound->AppendOpcode(
4732 csound, "la_i_qr_sym_eigen_mr", sizeof(la_i_qr_sym_eigen_mr_t), 0, 1,
4733 "ii", "ii", (int (*)(CSOUND *, void *)) & la_i_qr_sym_eigen_mr_t::init_,
4734 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4735 status |= csound->AppendOpcode(
4736 csound, "la_k_qr_sym_eigen_mr", sizeof(la_k_qr_sym_eigen_mr_t), 0, 3,
4737 "ii", "ik", (int (*)(CSOUND *, void *)) & la_k_qr_sym_eigen_mr_t::init_,
4738 (int (*)(CSOUND *, void *)) & la_k_qr_sym_eigen_mr_t::kontrol_,
4739 (int (*)(CSOUND *, void *))0);
4740 status |= csound->AppendOpcode(
4741 csound, "la_i_qr_sym_eigen_mc", sizeof(la_i_qr_sym_eigen_mc_t), 0, 1,
4742 "ii", "ii", (int (*)(CSOUND *, void *)) & la_i_qr_sym_eigen_mc_t::init_,
4743 (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4744 status |= csound->AppendOpcode(
4745 csound, "la_k_qr_sym_eigen_mc", sizeof(la_k_qr_sym_eigen_mc_t), 0, 3,
4746 "ii", "ik", (int (*)(CSOUND *, void *)) & la_k_qr_sym_eigen_mc_t::init_,
4747 (int (*)(CSOUND *, void *)) & la_k_qr_sym_eigen_mc_t::kontrol_,
4748 (int (*)(CSOUND *, void *))0);
4749 return status;
4750 }
4751
csoundModuleDestroy(CSOUND * csound)4752 PUBLIC int csoundModuleDestroy(CSOUND *csound) { return 0; }
4753 }
4754