comparison liboctave/mx-inlines.cc @ 3:9a4c07481e61

[project @ 1993-08-08 01:20:23 by jwe] Initial revision
author jwe
date Sun, 08 Aug 1993 01:21:46 +0000
parents
children 780cbbc57b7c
comparison
equal deleted inserted replaced
2:c0190df9885d 3:9a4c07481e61
1 // Helper functions for matrix classes. -*- C++ -*-
2 /*
3
4 Copyright (C) 1992, 1993 John W. Eaton
5
6 This file is part of Octave.
7
8 Octave is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
11 later version.
12
13 Octave is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Octave; see the file COPYING. If not, write to the Free
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21
22 */
23
24 #ifdef __GNUG__
25 #pragma implementation
26 #endif
27
28 // But first, some helper functions...
29
30 static inline double *
31 add (double *d, int len, double s)
32 {
33 double *result = 0;
34 if (len > 0)
35 {
36 result = new double [len];
37 for (int i = 0; i < len; i++)
38 result[i] = d[i] + s;
39 }
40 return result;
41 }
42
43 static inline double *
44 subtract (double *d, int len, double s)
45 {
46 double *result = 0;
47 if (len > 0)
48 {
49 result = new double [len];
50 for (int i = 0; i < len; i++)
51 result[i] = d[i] - s;
52 }
53 return result;
54 }
55
56 static inline double *
57 subtract (double s, double *d, int len)
58 {
59 double *result = 0;
60 if (len > 0)
61 {
62 result = new double [len];
63 for (int i = 0; i < len; i++)
64 result[i] = s - d[i];
65 }
66 return result;
67 }
68
69 static inline double *
70 multiply (double *d, int len, double s)
71 {
72 double *result = 0;
73 if (len > 0)
74 {
75 result = new double [len];
76 for (int i = 0; i < len; i++)
77 result[i] = d[i] * s;
78 }
79 return result;
80 }
81
82 static inline double *
83 divide (double *d, int len, double s)
84 {
85 double *result = 0;
86 if (len > 0)
87 {
88 result = new double [len];
89 for (int i = 0; i < len; i++)
90 result[i] = d[i] / s;
91 }
92 return result;
93 }
94
95 static inline double *
96 divide (double s, double *d, int len)
97 {
98 double *result = 0;
99 if (len > 0)
100 {
101 result = new double [len];
102 for (int i = 0; i < len; i++)
103 result[i] = s / d[i];
104 }
105 return result;
106 }
107
108 static inline double *
109 add (double *x, double *y, int len)
110 {
111 double *result = 0;
112 if (len > 0)
113 {
114 result = new double [len];
115 for (int i = 0; i < len; i++)
116 result[i] = x[i] + y[i];
117 }
118 return result;
119 }
120
121 static inline double *
122 subtract (double *x, double *y, int len)
123 {
124 double *result = 0;
125 if (len > 0)
126 {
127 result = new double [len];
128 for (int i = 0; i < len; i++)
129 result[i] = x[i] - y[i];
130 }
131 return result;
132 }
133
134 static inline double *
135 multiply (double *x, double *y, int len)
136 {
137 double *result = 0;
138 if (len > 0)
139 {
140 result = new double [len];
141 for (int i = 0; i < len; i++)
142 result[i] = x[i] * y[i];
143 }
144 return result;
145 }
146
147 static inline double *
148 divide (double *x, double *y, int len)
149 {
150 double *result = 0;
151 if (len > 0)
152 {
153 result = new double [len];
154 for (int i = 0; i < len; i++)
155 result[i] = x[i] / y[i];
156 }
157 return result;
158 }
159
160 static inline double *
161 add2 (double *x, double *y, int len)
162 {
163 for (int i = 0; i < len; i++)
164 x[i] += y[i];
165 return x;
166 }
167
168 static inline double *
169 subtract2 (double *x, double *y, int len)
170 {
171 for (int i = 0; i < len; i++)
172 x[i] -= y[i];
173 return x;
174 }
175
176 static inline double *
177 negate (double *d, int len)
178 {
179 double *result = 0;
180 if (len > 0)
181 {
182 result = new double [len];
183 for (int i = 0; i < len; i++)
184 result[i] = -d[i];
185 }
186 return result;
187 }
188
189 static inline void
190 copy (double *d, int len, double s)
191 {
192 for (int i = 0; i < len; i++)
193 d[i] = s;
194 }
195
196 static inline void
197 copy (double *x, double *y, int len)
198 {
199 for (int i = 0; i < len; i++)
200 x[i] = y[i];
201 }
202
203 static inline double *
204 dup (double *x, int len)
205 {
206 double *retval = (double *) NULL;
207 if (len > 0)
208 {
209 retval = new double [len];
210 for (int i = 0; i < len; i++)
211 retval[i] = x[i];
212 }
213 return retval;
214 }
215
216 static inline int
217 equal (double *x, double *y, int len)
218 {
219 for (int i = 0; i < len; i++)
220 if (x[i] != y[i])
221 return 0;
222 return 1;
223 }
224
225 // And some for Complex too...
226
227 static inline Complex *
228 add (Complex *d, int len, Complex s)
229 {
230 Complex *result = 0;
231 if (len > 0)
232 {
233 result = new Complex [len];
234 for (int i = 0; i < len; i++)
235 result[i] = d[i] + s;
236 }
237 return result;
238 }
239
240 static inline Complex *
241 add (Complex s, Complex *d, int len)
242 {
243 Complex *result = 0;
244 if (len > 0)
245 {
246 result = new Complex [len];
247 for (int i = 0; i < len; i++)
248 result[i] = s + d[i];
249 }
250 return result;
251 }
252
253 static inline Complex *
254 subtract (Complex *d, int len, Complex s)
255 {
256 Complex *result = 0;
257 if (len > 0)
258 {
259 result = new Complex [len];
260 for (int i = 0; i < len; i++)
261 result[i] = d[i] - s;
262 }
263 return result;
264 }
265
266 static inline Complex *
267 subtract (Complex s, Complex *d, int len)
268 {
269 Complex *result = 0;
270 if (len > 0)
271 {
272 result = new Complex [len];
273 for (int i = 0; i < len; i++)
274 result[i] = s - d[i];
275 }
276 return result;
277 }
278
279 static inline Complex *
280 multiply (Complex *d, int len, Complex s)
281 {
282 Complex *result = 0;
283 if (len > 0)
284 {
285 result = new Complex [len];
286 for (int i = 0; i < len; i++)
287 result[i] = d[i] * s;
288 }
289 return result;
290 }
291
292 static inline Complex *
293 multiply (Complex s, Complex *d, int len)
294 {
295 Complex *result = 0;
296 if (len > 0)
297 {
298 result = new Complex [len];
299 for (int i = 0; i < len; i++)
300 result[i] = s * d[i];
301 }
302 return result;
303 }
304
305 static inline Complex *
306 divide (Complex *d, int len, Complex s)
307 {
308 Complex *result = 0;
309 if (len > 0)
310 {
311 result = new Complex [len];
312 for (int i = 0; i < len; i++)
313 result[i] = d[i] / s;
314 }
315 return result;
316 }
317
318 static inline Complex *
319 divide (Complex s, Complex *d, int len)
320 {
321 Complex *result = 0;
322 if (len > 0)
323 {
324 result = new Complex [len];
325 for (int i = 0; i < len; i++)
326 result[i] = s / d[i];
327 }
328 return result;
329 }
330
331 static inline Complex *
332 add (Complex *x, Complex *y, int len)
333 {
334 Complex *result = 0;
335 if (len > 0)
336 {
337 result = new Complex [len];
338 for (int i = 0; i < len; i++)
339 result[i] = x[i] + y[i];
340 }
341 return result;
342 }
343
344 static inline Complex *
345 subtract (Complex *x, Complex *y, int len)
346 {
347 Complex *result = 0;
348 if (len > 0)
349 {
350 result = new Complex [len];
351 for (int i = 0; i < len; i++)
352 result[i] = x[i] - y[i];
353 }
354 return result;
355 }
356
357 static inline Complex *
358 multiply (Complex *x, Complex *y, int len)
359 {
360 Complex *result = 0;
361 if (len > 0)
362 {
363 result = new Complex [len];
364 for (int i = 0; i < len; i++)
365 result[i] = x[i] * y[i];
366 }
367 return result;
368 }
369
370 static inline Complex *
371 divide (Complex *x, Complex *y, int len)
372 {
373 Complex *result = 0;
374 if (len > 0)
375 {
376 result = new Complex [len];
377 for (int i = 0; i < len; i++)
378 result[i] = x[i] / y[i];
379 }
380 return result;
381 }
382
383 static inline Complex *
384 add2 (Complex *x, Complex *y, int len)
385 {
386 for (int i = 0; i < len; i++)
387 x[i] += y[i];
388 return x;
389 }
390
391 static inline Complex *
392 subtract2 (Complex *x, Complex *y, int len)
393 {
394 for (int i = 0; i < len; i++)
395 x[i] -= y[i];
396 return x;
397 }
398
399 static inline Complex *
400 negate (Complex *d, int len)
401 {
402 Complex *result = 0;
403 if (len > 0)
404 {
405 result = new Complex [len];
406 for (int i = 0; i < len; i++)
407 result[i] = -d[i];
408 }
409 return result;
410 }
411
412 static inline double *
413 not (Complex *d, int len)
414 {
415 double *result = 0;
416 if (len > 0)
417 {
418 result = new double [len];
419 for (int i = 0; i < len; i++)
420 result[i] = (d[i] == 0.0);
421 }
422 return result;
423 }
424
425 static inline void
426 copy (Complex *d, int len, Complex s)
427 {
428 for (int i = 0; i < len; i++)
429 d[i] = s;
430 }
431
432 static inline void
433 copy (Complex *x, Complex *y, int len)
434 {
435 for (int i = 0; i < len; i++)
436 x[i] = y[i];
437 }
438
439 static inline Complex *
440 dup (Complex *x, int len)
441 {
442 Complex *retval = (Complex *) NULL;
443 if (len > 0)
444 {
445 retval = new Complex [len];
446 for (int i = 0; i < len; i++)
447 retval[i] = x[i];
448 }
449 return retval;
450 }
451
452 static inline Complex *
453 make_complex (double *x, int len)
454 {
455 Complex *retval = (Complex *) NULL;
456 if (len > 0)
457 {
458 retval = new Complex [len];
459 for (int i = 0; i < len; i++)
460 retval[i] = x[i];
461 }
462 return retval;
463 }
464
465 static inline Complex *
466 conj_dup (Complex *x, int len)
467 {
468 Complex *retval = (Complex *) NULL;
469 if (len > 0)
470 {
471 retval = new Complex [len];
472 for (int i = 0; i < len; i++)
473 retval[i] = conj (x[i]);
474 }
475 return retval;
476 }
477
478 static inline double *
479 real_dup (Complex *x, int len)
480 {
481 double *retval = (double *) NULL;
482 if (len > 0)
483 {
484 retval = new double [len];
485 for (int i = 0; i < len; i++)
486 retval[i] = real (x[i]);
487 }
488 return retval;
489 }
490
491 static inline double *
492 imag_dup (Complex *x, int len)
493 {
494 double *retval = (double *) NULL;
495 if (len > 0)
496 {
497 retval = new double [len];
498 for (int i = 0; i < len; i++)
499 retval[i] = imag (x[i]);
500 }
501 return retval;
502 }
503
504 static inline int
505 equal (Complex *x, Complex *y, int len)
506 {
507 for (int i = 0; i < len; i++)
508 if (x[i] != y[i])
509 return 0;
510 return 1;
511 }
512
513 // And still some more for mixed Complex/double operations...
514
515 static inline Complex *
516 add (Complex *d, int len, double s)
517 {
518 Complex *result = 0;
519 if (len > 0)
520 {
521 result = new Complex [len];
522 for (int i = 0; i < len; i++)
523 result[i] = d[i] + s;
524 }
525 return result;
526 }
527
528 static inline Complex *
529 add (double *d, int len, Complex s)
530 {
531 Complex *result = 0;
532 if (len > 0)
533 {
534 result = new Complex [len];
535 for (int i = 0; i < len; i++)
536 result[i] = d[i] + s;
537 }
538 return result;
539 }
540
541 static inline Complex *
542 add (double s, Complex *d, int len)
543 {
544 Complex *result = 0;
545 if (len > 0)
546 {
547 result = new Complex [len];
548 for (int i = 0; i < len; i++)
549 result[i] = s + d[i];
550 }
551 return result;
552 }
553
554 static inline Complex *
555 add (Complex s, double *d, int len)
556 {
557 Complex *result = 0;
558 if (len > 0)
559 {
560 result = new Complex [len];
561 for (int i = 0; i < len; i++)
562 result[i] = s + d[i];
563 }
564 return result;
565 }
566
567 static inline Complex *
568 subtract (Complex *d, int len, double s)
569 {
570 Complex *result = 0;
571 if (len > 0)
572 {
573 result = new Complex [len];
574 for (int i = 0; i < len; i++)
575 result[i] = d[i] - s;
576 }
577 return result;
578 }
579
580 static inline Complex *
581 subtract (double *d, int len, Complex s)
582 {
583 Complex *result = 0;
584 if (len > 0)
585 {
586 result = new Complex [len];
587 for (int i = 0; i < len; i++)
588 result[i] = d[i] - s;
589 }
590 return result;
591 }
592
593 static inline Complex *
594 subtract (double s, Complex *d, int len)
595 {
596 Complex *result = 0;
597 if (len > 0)
598 {
599 result = new Complex [len];
600 for (int i = 0; i < len; i++)
601 result[i] = s - d[i];
602 }
603 return result;
604 }
605
606 static inline Complex *
607 subtract (Complex s, double *d, int len)
608 {
609 Complex *result = 0;
610 if (len > 0)
611 {
612 result = new Complex [len];
613 for (int i = 0; i < len; i++)
614 result[i] = s - d[i];
615 }
616 return result;
617 }
618
619 static inline Complex *
620 multiply (Complex *d, int len, double s)
621 {
622 Complex *result = 0;
623 if (len > 0)
624 {
625 result = new Complex [len];
626 for (int i = 0; i < len; i++)
627 result[i] = d[i] * s;
628 }
629 return result;
630 }
631
632 static inline Complex *
633 multiply (double *d, int len, Complex s)
634 {
635 Complex *result = 0;
636 if (len > 0)
637 {
638 result = new Complex [len];
639 for (int i = 0; i < len; i++)
640 result[i] = d[i] * s;
641 }
642 return result;
643 }
644
645 static inline Complex *
646 divide (Complex *d, int len, double s)
647 {
648 Complex *result = 0;
649 if (len > 0)
650 {
651 result = new Complex [len];
652 for (int i = 0; i < len; i++)
653 result[i] = d[i] / s;
654 }
655 return result;
656 }
657
658 static inline Complex *
659 divide (double *d, int len, Complex s)
660 {
661 Complex *result = 0;
662 if (len > 0)
663 {
664 result = new Complex [len];
665 for (int i = 0; i < len; i++)
666 result[i] = d[i] / s;
667 }
668 return result;
669 }
670
671 static inline Complex *
672 divide (double s, Complex *d, int len)
673 {
674 Complex *result = 0;
675 if (len > 0)
676 {
677 result = new Complex [len];
678 for (int i = 0; i < len; i++)
679 result[i] = s / d[i];
680 }
681 return result;
682 }
683
684 static inline Complex *
685 divide (Complex s, double *d, int len)
686 {
687 Complex *result = 0;
688 if (len > 0)
689 {
690 result = new Complex [len];
691 for (int i = 0; i < len; i++)
692 result[i] = s / d[i];
693 }
694 return result;
695 }
696
697 static inline Complex *
698 add (Complex *x, double *y, int len)
699 {
700 Complex *result = 0;
701 if (len > 0)
702 {
703 result = new Complex [len];
704 for (int i = 0; i < len; i++)
705 result[i] = x[i] + y[i];
706 }
707 return result;
708 }
709
710 static inline Complex *
711 add (double *x, Complex *y, int len)
712 {
713 Complex *result = 0;
714 if (len > 0)
715 {
716 result = new Complex [len];
717 for (int i = 0; i < len; i++)
718 result[i] = x[i] + y[i];
719 }
720 return result;
721 }
722
723 static inline Complex *
724 subtract (Complex *x, double *y, int len)
725 {
726 Complex *result = 0;
727 if (len > 0)
728 {
729 result = new Complex [len];
730 for (int i = 0; i < len; i++)
731 result[i] = x[i] - y[i];
732 }
733 return result;
734 }
735
736 static inline Complex *
737 subtract (double *x, Complex *y, int len)
738 {
739 Complex *result = 0;
740 if (len > 0)
741 {
742 result = new Complex [len];
743 for (int i = 0; i < len; i++)
744 result[i] = x[i] - y[i];
745 }
746 return result;
747 }
748
749 static inline Complex *
750 multiply (Complex *x, double *y, int len)
751 {
752 Complex *result = 0;
753 if (len > 0)
754 {
755 result = new Complex [len];
756 for (int i = 0; i < len; i++)
757 result[i] = x[i] * y[i];
758 }
759 return result;
760 }
761
762 static inline Complex *
763 multiply (double *x, Complex *y, int len)
764 {
765 Complex *result = 0;
766 if (len > 0)
767 {
768 result = new Complex [len];
769 for (int i = 0; i < len; i++)
770 result[i] = x[i] * y[i];
771 }
772 return result;
773 }
774
775 static inline Complex *
776 divide (Complex *x, double *y, int len)
777 {
778 Complex *result = 0;
779 if (len > 0)
780 {
781 result = new Complex [len];
782 for (int i = 0; i < len; i++)
783 result[i] = x[i] / y[i];
784 }
785 return result;
786 }
787
788 static inline Complex *
789 divide (double *x, Complex *y, int len)
790 {
791 Complex *result = 0;
792 if (len > 0)
793 {
794 result = new Complex [len];
795 for (int i = 0; i < len; i++)
796 result[i] = x[i] / y[i];
797 }
798 return result;
799 }
800
801 static inline Complex *
802 add2 (Complex *x, double *y, int len)
803 {
804 for (int i = 0; i < len; i++)
805 x[i] += y[i];
806 return x;
807 }
808
809 static inline Complex *
810 subtract2 (Complex *x, double *y, int len)
811 {
812 for (int i = 0; i < len; i++)
813 x[i] -= y[i];
814 return x;
815 }
816
817 static inline void
818 copy (Complex *d, int len, double s)
819 {
820 for (int i = 0; i < len; i++)
821 d[i] = s;
822 }
823
824 static inline void
825 copy (Complex *x, double *y, int len)
826 {
827 for (int i = 0; i < len; i++)
828 x[i] = y[i];
829 }
830
831 /*
832 ;;; Local Variables: ***
833 ;;; mode: C++ ***
834 ;;; page-delimiter: "^/\\*" ***
835 ;;; End: ***
836 */