26 #ifndef _CXSC_CMATRIX_HPP_INCLUDED
27 #define _CXSC_CMATRIX_HPP_INCLUDED
29 #include "xscclass.hpp"
32 #include "cvector.hpp"
35 #include "rmatrix.hpp"
62 int size,start,offset;
93 #ifdef _CXSC_FRIEND_TPL
95 template <
class MV1,
class MV2>
friend MV1 &_mvmvassign(MV1 &v,
const MV2 &rv)
101 template <
class MV,
class S>
friend MV &_mvsassign(MV &v,
const S &r) noexcept;
102 template <
class MV,
class V>
friend MV &_mvvassign(MV &v,
const V &rv)
103 #if(CXSC_INDEX_CHECK)
108 template <
class V,
class MV2,
class S>
friend V &_vmvassign(V &v,
const MV2 &rv) noexcept;
109 template <
class MV,
class V>
friend V _mvabs(
const MV &mv) noexcept;
110 template <
class MV,
class V>
friend V _mvim(
const MV &mv) noexcept;
111 template <
class MV,
class V>
friend V _mvre(
const MV &mv) noexcept;
112 template <
class MV,
class V>
friend MV &_mvvsetim(MV &v,
const V &rv)
113 #if(CXSC_INDEX_CHECK)
118 template <
class MV,
class V>
friend MV &_mvvsetre(MV &v,
const V &rv)
119 #if(CXSC_INDEX_CHECK)
124 template <
class MV,
class S>
friend MV &_mvssetim(MV &mv,
const S &s) noexcept;
125 template <
class MV,
class S>
friend MV &_mvssetre(MV &mv,
const S &s) noexcept;
126 template <
class DP,
class V,
class SV>
friend void _vmvaccu(DP &dp,
const V & rv1,
const SV &rv2)
127 #if(CXSC_INDEX_CHECK)
132 template <
class DP,
class MV1,
class MV2>
friend void _mvmvaccu(DP &dp,
const MV1 & rv1,
const MV2 &rv2)
133 #if(CXSC_INDEX_CHECK)
139 template <
class MV1,
class MV2,
class S>
friend S _mvmvcmult(
const MV1 & rv1,
const MV2 &rv2)
140 #if(CXSC_INDEX_CHECK)
145 template <
class MV1,
class MV2,
class S>
friend S _mvmvcimult(
const MV1 & rv1,
const MV2 &rv2)
146 #if(CXSC_INDEX_CHECK)
151 template <
class V,
class MV,
class S>
friend S _vmvcmult(
const V &rv1,
const MV &rv2)
152 #if(CXSC_INDEX_CHECK)
157 template <
class V,
class MV,
class S>
friend S _vmvcimult(
const V &rv1,
const MV &rv2)
158 #if(CXSC_INDEX_CHECK)
163 template <
class MV,
class S,
class E>
friend E _mvsmult(
const MV &rv,
const S &s) noexcept;
164 template <
class MV1,
class MV2,
class E>
friend E _mvmvplus(
const MV1 &rv1,
const MV2 &rv2)
165 #if(CXSC_INDEX_CHECK)
170 template <
class MV1,
class MV2,
class E>
friend E _mvmvminus(
const MV1 &rv1,
const MV2 &rv2)
171 #if(CXSC_INDEX_CHECK)
176 template <
class MV,
class V,
class E>
friend E _mvvplus(
const MV &rv1,
const V &rv2)
177 #if(CXSC_INDEX_CHECK)
182 template <
class MV,
class V,
class E>
friend E _mvvminus(
const MV &rv1,
const V &rv2)
183 #if(CXSC_INDEX_CHECK)
188 template <
class V,
class MV,
class E>
friend E _vmvminus(
const V &rv1,
const MV &rv2)
189 #if(CXSC_INDEX_CHECK)
194 template <
class MV,
class S,
class E>
friend E _mvsdiv(
const MV &rv,
const S &s) noexcept;
195 template <
class MV,
class S>
friend MV &_mvsmultassign(MV &v,
const S &r) noexcept;
196 template <
class MV,
class S>
friend MV &_mvsplusassign(MV &v,
const S &r) noexcept;
197 template <
class MV,
class S>
friend MV &_mvsminusassign(MV &v,
const S &r) noexcept;
198 template <
class MV,
class S>
friend MV &_mvsdivassign(MV &v,
const S &r) noexcept;
199 template <
class MV,
class V>
friend MV &_mvvplusassign(MV &v,
const V &rv)
200 #if(CXSC_INDEX_CHECK)
205 template <
class V,
class MV>
friend V &_vmvplusassign(V &rv,
const MV &v)
206 #if(CXSC_INDEX_CHECK)
211 template <
class MV,
class V>
friend MV &_mvvminusassign(MV &v,
const V &rv)
212 #if(CXSC_INDEX_CHECK)
217 template <
class V,
class MV>
friend V &_vmvminusassign(V &rv,
const MV &v)
218 #if(CXSC_INDEX_CHECK)
228 template <
class V,
class MV>
friend V &_vmvsetinf(V &rv,
const MV &v)
229 #if(CXSC_INDEX_CHECK)
234 template <
class V,
class MV>
friend V &_vmvsetsup(V &rv,
const MV &v)
235 #if(CXSC_INDEX_CHECK)
240 template <
class V,
class MV>
friend V &_vmvusetinf(V &rv,
const MV &v)
241 #if(CXSC_INDEX_CHECK)
246 template <
class V,
class MV>
friend V &_vmvusetsup(V &rv,
const MV &v)
247 #if(CXSC_INDEX_CHECK)
258 explicit INLINE
cmatrix_subv (
complex *d,
const int &l,
const int &u,
const int &s,
const int &st,
const int &o) noexcept:dat(d),lb(l),ub(u),size(s),start(st),offset(o) { }
274 #if(CXSC_INDEX_CHECK)
282 #if(CXSC_INDEX_CHECK)
292 #if(CXSC_INDEX_CHECK)
299 #if(CXSC_INDEX_CHECK)
324 #if(CXSC_INDEX_CHECK)
331 #if(CXSC_INDEX_CHECK)
338 #if(CXSC_INDEX_CHECK)
345 #if(CXSC_INDEX_CHECK)
387 #if(CXSC_INDEX_CHECK)
394 #if(CXSC_INDEX_CHECK)
401 #if(CXSC_INDEX_CHECK)
408 #if(CXSC_INDEX_CHECK)
420 #if(CXSC_INDEX_CHECK)
427 #if(CXSC_INDEX_CHECK)
434 #if(CXSC_INDEX_CHECK)
441 #if(CXSC_INDEX_CHECK)
457 #if(CXSC_INDEX_CHECK)
464 #if(CXSC_INDEX_CHECK)
471 #if(CXSC_INDEX_CHECK)
478 #if(CXSC_INDEX_CHECK)
490 #if(CXSC_INDEX_CHECK)
497 #if(CXSC_INDEX_CHECK)
520 int lb1,ub1,lb2,ub2,xsize,ysize;
523 double* to_blas_array()
const {
return (
double*)dat; }
525 #ifdef _CXSC_FRIEND_TPL
527 template <
class S,
class M>
friend void _smconstr(S &s,
const M &m)
528 #if(CXSC_INDEX_CHECK)
533 template <
class V,
class M,
class S>
friend void _vmconstr(V &v,
const M &m)
534 #if(CXSC_INDEX_CHECK)
539 template <
class M1,
class M2,
class S>
friend M1 &_mmassign(M1 &m1,
const M2 &m,S ms) noexcept;
540 template <
class M,
class MS2,
class S>
friend M &_mmsassign(M &m,
const MS2 &ms) noexcept;
541 template <
class MS,
class M>
friend MS &_msmassign(MS &ms,
const M &m)
542 #if(CXSC_INDEX_CHECK)
547 template <
class M,
class S>
friend M &_msassign(M &m,
const S &r) noexcept;
548 template <
class V,
class M,
class S>
friend V &_vmassign(V &v,
const M &m)
549 #if(CXSC_INDEX_CHECK)
554 template <
class M,
class V,
class S>
friend M &_mvassign(M &m,
const V &v) noexcept;
555 template <
class M>
friend int _mlb(
const M &m,
const int &i)
556 #if(CXSC_INDEX_CHECK)
561 template <
class M>
friend int _mub(
const M &m,
const int &i)
562 #if(CXSC_INDEX_CHECK)
567 template <
class M>
friend M &_msetlb(M &m,
const int &i,
const int &j)
568 #if(CXSC_INDEX_CHECK)
573 template <
class M>
friend M &_msetub(M &m,
const int &i,
const int &j)
574 #if(CXSC_INDEX_CHECK)
579 template <
class M,
class E>
friend E _mre(
const M &m) noexcept;
580 template <
class M,
class E>
friend E _mim(
const M &m) noexcept;
581 template <
class M1,
class M2>
friend M1 &_mmsetre(M1 &m1,
const M2 &m2)
582 #if(CXSC_INDEX_CHECK)
587 template <
class M1,
class M2>
friend M1 &_mmsetim(M1 &m1,
const M2 &m2)
588 #if(CXSC_INDEX_CHECK)
593 template <
class M1,
class MS2>
friend M1 &_mmssetre(M1 &m1,
const MS2 &ms2)
594 #if(CXSC_INDEX_CHECK)
599 template <
class M1,
class MS2>
friend M1 &_mmssetim(M1 &m1,
const MS2 &ms2)
600 #if(CXSC_INDEX_CHECK)
605 template <
class M>
friend void _mresize(M &A) noexcept;
606 template <
class M,
class S>
friend void _mresize(M &A,
const int &m,
const int &n)
607 #if(CXSC_INDEX_CHECK)
612 template <
class M,
class S>
friend void _mresize(M &A,
const int &m1,
const int &m2,
const int &n1,
const int &n2)
613 #if(CXSC_INDEX_CHECK)
618 template <
class M,
class E>
friend E _mabs(
const M &m) noexcept;
620 template <
class M1,
class M2,
class E>
friend E _mmplus(
const M1 &m1,
const M2 &m2)
621 #if(CXSC_INDEX_CHECK)
626 template <
class M,
class MS,
class E>
friend E _mmsplus(
const M &m,
const MS &ms)
627 #if(CXSC_INDEX_CHECK)
632 template <
class M>
friend M _mminus(
const M &m) noexcept;
633 template <
class MS,
class E>
friend E _msminus(
const MS &ms) noexcept;
634 template <
class M1,
class M2,
class E>
friend E _mmminus(
const M1 &m1,
const M2 &m2)
635 #if(CXSC_INDEX_CHECK)
640 template <
class M1,
class M2>
friend M1 &_mmplusassign(M1 &m1,
const M2 &m2)
641 #if(CXSC_INDEX_CHECK)
646 template <
class M,
class MS>
friend M &_mmsplusassign(M &m1,
const MS &ms)
647 #if(CXSC_INDEX_CHECK)
652 template <
class MS,
class M>
friend MS &_msmplusassign(MS &ms,
const M &m1)
653 #if(CXSC_INDEX_CHECK)
658 template <
class MS1,
class MS2,
class E>
friend E _msmsplus(
const MS1 &m1,
const MS2 &m2)
659 #if(CXSC_INDEX_CHECK)
664 template <
class M,
class MS,
class E>
friend E _mmsminus(
const M &m,
const MS &ms)
665 #if(CXSC_INDEX_CHECK)
670 template <
class MS,
class M,
class E>
friend E _msmminus(
const MS &ms,
const M &m)
671 #if(CXSC_INDEX_CHECK)
676 template <
class MS1,
class MS2,
class E>
friend E _msmsminus(
const MS1 &ms1,
const MS2 &ms2)
677 #if(CXSC_INDEX_CHECK)
682 template <
class M1,
class M2>
friend M1 &_mmminusassign(M1 &m1,
const M2 &m2)
683 #if(CXSC_INDEX_CHECK)
688 template <
class M,
class MS>
friend M &_mmsminusassign(M &m1,
const MS &ms)
689 #if(CXSC_INDEX_CHECK)
694 template <
class MS,
class M>
friend MS &_msmminusassign(MS &ms,
const M &m1)
695 #if(CXSC_INDEX_CHECK)
700 template <
class M1,
class M2,
class E>
friend E _mmcmult(
const M1 &m1,
const M2 &m2)
701 #if(CXSC_INDEX_CHECK)
706 template <
class M1,
class M2,
class E>
friend E _mmcimult(
const M1 &m1,
const M2 &m2)
707 #if(CXSC_INDEX_CHECK)
712 template <
class M1,
class M2,
class S>
friend M1 &_mmcmultassign(M1 &m1,
const M2 &m2)
713 #if(CXSC_INDEX_CHECK)
718 template <
class M1,
class M2,
class S>
friend M1 &_mmcimultassign(M1 &m1,
const M2 &m2)
719 #if(CXSC_INDEX_CHECK)
724 template <
class M,
class MS,
class E>
friend E _mmscmult(
const M &m1,
const MS &ms)
725 #if(CXSC_INDEX_CHECK)
730 template <
class M,
class MS,
class E>
friend E _mmscimult(
const M &m1,
const MS &ms)
731 #if(CXSC_INDEX_CHECK)
736 template <
class MS,
class M,
class E>
friend E _msmcmult(
const MS &ms,
const M &m2)
737 #if(CXSC_INDEX_CHECK)
742 template <
class MS,
class M,
class E>
friend E _msmcimult(
const MS &ms,
const M &m2)
743 #if(CXSC_INDEX_CHECK)
748 template <
class M,
class MS,
class S>
friend M &_mmscmultassign(M &m1,
const MS &ms)
749 #if(CXSC_INDEX_CHECK)
754 template <
class M,
class MS,
class S>
friend M &_mmscimultassign(M &m1,
const MS &ms)
755 #if(CXSC_INDEX_CHECK)
760 template <
class MS1,
class MS2,
class E>
friend E _msmscmult(
const MS1 &ms1,
const MS2 &ms2)
761 #if(CXSC_INDEX_CHECK)
766 template <
class MS1,
class MS2,
class E>
friend E _msmscimult(
const MS1 &ms1,
const MS2 &ms2)
767 #if(CXSC_INDEX_CHECK)
772 template <
class M1,
class M2,
class E>
friend E _mmconv(
const M1 &m1,
const M2 &m2)
773 #if(CXSC_INDEX_CHECK)
778 template <
class M,
class MS,
class E>
friend E _mmsconv(
const M &m,
const MS &ms)
779 #if(CXSC_INDEX_CHECK)
785 template <
class S,
class M,
class E>
friend E _smmult(
const S &c,
const M &m) noexcept;
786 template <
class M,
class S>
friend M &_msmultassign(M &m,
const S &c) noexcept;
787 template <
class S,
class MS,
class E>
friend E _smsmult(
const S &c,
const MS &ms) noexcept;
788 template <
class M,
class S,
class E>
friend E _msdiv(
const M &m,
const S &c) noexcept;
789 template <
class M,
class S>
friend M &_msdivassign(M &m,
const S &c) noexcept;
790 template <
class MS,
class S,
class E>
friend E _mssdiv(
const MS &ms,
const S &c) noexcept;
792 template <
class M,
class V,
class E>
friend E _mvcmult(
const M &m,
const V &v)
793 #if(CXSC_INDEX_CHECK)
798 template <
class M,
class V,
class E>
friend E _mvcimult(
const M &m,
const V &v)
799 #if(CXSC_INDEX_CHECK)
804 template <
class V,
class M,
class E>
friend E _vmcmult(
const V &v,
const M &m)
805 #if(CXSC_INDEX_CHECK)
810 template <
class V,
class M,
class E>
friend E _vmcimult(
const V &v,
const M &m)
811 #if(CXSC_INDEX_CHECK)
816 template <
class V,
class M,
class S>
friend V &_vmcmultassign(V &v,
const M &m)
817 #if(CXSC_INDEX_CHECK)
822 template <
class V,
class M,
class S>
friend V &_vmcimultassign(V &v,
const M &m)
823 #if(CXSC_INDEX_CHECK)
828 template <
class VS,
class M,
class S>
friend VS &_vsmcmultassign(VS &v,
const M &m)
829 #if(CXSC_INDEX_CHECK)
834 template <
class VS,
class M,
class S>
friend VS &_vsmcimultassign(VS &v,
const M &m)
835 #if(CXSC_INDEX_CHECK)
841 template <
class M>
friend void *_mvoid(
const M &m) noexcept;
842 template <
class M>
friend bool _mnot(
const M &m) noexcept;
843 template <
class MS>
friend void *_msvoid(
const MS &ms) noexcept;
844 template <
class MS>
friend bool _msnot(
const MS &ms) noexcept;
845 template <
class M1,
class M2>
friend bool _mmeq(
const M1 &m1,
const M2 &m2) noexcept;
846 template <
class M1,
class M2>
friend bool _mmneq(
const M1 &m1,
const M2 &m2) noexcept;
847 template <
class M1,
class M2>
friend bool _mmless(
const M1 &m1,
const M2 &m2) noexcept;
848 template <
class M1,
class M2>
friend bool _mmleq(
const M1 &m1,
const M2 &m2) noexcept;
849 template <
class M,
class MS>
friend bool _mmseq(
const M &m1,
const MS &ms) noexcept;
850 template <
class M,
class MS>
friend bool _mmsneq(
const M &m1,
const MS &ms) noexcept;
851 template <
class M,
class MS>
friend bool _mmsless(
const M &m1,
const MS &ms) noexcept;
852 template <
class M,
class MS>
friend bool _mmsleq(
const M &m1,
const MS &ms) noexcept;
853 template <
class MS,
class M>
friend bool _msmless(
const MS &ms,
const M &m1) noexcept;
854 template <
class MS,
class M>
friend bool _msmleq(
const MS &ms,
const M &m1) noexcept;
855 template <
class M>
friend std::ostream &_mout(std::ostream &s,
const M &r) noexcept;
856 template <
class M>
friend std::istream &_min(std::istream &s,M &r) noexcept;
865 template <
class MS,
class V,
class E>
friend E _msvcmult(
const MS &ms,
const V &v)
866 #if(CXSC_INDEX_CHECK)
871 template <
class MS,
class V,
class E>
friend E _msvcimult(
const MS &ms,
const V &v)
872 #if(CXSC_INDEX_CHECK)
877 template <
class V,
class MS,
class E>
friend E _vmscmult(
const V &v,
const MS &ms)
878 #if(CXSC_INDEX_CHECK)
883 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
884 #if(CXSC_INDEX_CHECK)
893 template <
class MS1,
class MS2,
class E>
friend E _msmsconv(
const MS1 &m1,
const MS2 &m2)
894 #if(CXSC_INDEX_CHECK)
899 template <
class M1,
class M2,
class E>
friend E _mmsect(
const M1 &m1,
const M2 &m2)
900 #if(CXSC_INDEX_CHECK)
905 template <
class M,
class MS,
class E>
friend E _mmssect(
const M &m,
const MS &ms)
906 #if(CXSC_INDEX_CHECK)
912 template <
class MS1,
class MS2,
class E>
friend E _msmssect(
const MS1 &m1,
const MS2 &m2)
913 #if(CXSC_INDEX_CHECK)
924 template <
class M,
class E>
friend E _mdiam(
const M &m) noexcept;
925 template <
class M,
class E>
friend E _mmid(
const M &m) noexcept;
926 template <
class MS,
class E>
friend E _msdiam(
const MS &ms) noexcept;
927 template <
class MS,
class E>
friend E _msmid(
const MS &ms) noexcept;
928 template <
class M,
class E>
friend E _minf(
const M &m) noexcept;
929 template <
class MS,
class E>
friend E _msinf(
const MS &ms) noexcept;
930 template <
class M,
class E>
friend E _msup(
const M &m) noexcept;
931 template <
class MS,
class E>
friend E _mssup(
const MS &ms) noexcept;
932 template <
class M1,
class M2>
friend M1 &_mmsetinf(M1 &m1,
const M2 &m2)
933 #if(CXSC_INDEX_CHECK)
938 template <
class M1,
class M2>
friend M1 &_mmsetsup(M1 &m1,
const M2 &m2)
939 #if(CXSC_INDEX_CHECK)
944 template <
class M1,
class M2>
friend M1 &_mmusetinf(M1 &m1,
const M2 &m2)
945 #if(CXSC_INDEX_CHECK)
950 template <
class M1,
class M2>
friend M1 &_mmusetsup(M1 &m1,
const M2 &m2)
951 #if(CXSC_INDEX_CHECK)
956 template <
class MS1,
class M2>
friend MS1 &_msmsetinf(MS1 &ms1,
const M2 &m2)
957 #if(CXSC_INDEX_CHECK)
962 template <
class MS1,
class M2>
friend MS1 &_msmsetsup(MS1 &ms1,
const M2 &m2)
963 #if(CXSC_INDEX_CHECK)
968 template <
class MS1,
class M2>
friend MS1 &_msmusetinf(MS1 &ms1,
const M2 &m2)
969 #if(CXSC_INDEX_CHECK)
974 template <
class MS1,
class M2>
friend MS1 &_msmusetsup(MS1 &ms1,
const M2 &m2)
975 #if(CXSC_INDEX_CHECK)
983 template <
class M1,
class M2>
friend M1 &_mmconvassign(M1 &m1,
const M2 &m2)
984 #if(CXSC_INDEX_CHECK)
989 template <
class M,
class MS>
friend M &_mmsconvassign(M &m1,
const MS &ms)
990 #if(CXSC_INDEX_CHECK)
995 template <
class MS,
class M>
friend MS &_msmconvassign(MS &ms,
const M &m1)
996 #if(CXSC_INDEX_CHECK)
1002 template <
class M1,
class M2>
friend M1 &_mmsectassign(M1 &m1,
const M2 &m2)
1003 #if(CXSC_INDEX_CHECK)
1008 template <
class M,
class MS>
friend M &_mmssectassign(M &m1,
const MS &ms)
1009 #if(CXSC_INDEX_CHECK)
1014 template <
class MS,
class M>
friend MS &_msmsectassign(MS &ms,
const M &m1)
1015 #if(CXSC_INDEX_CHECK)
1040 explicit INLINE
cmatrix(
const int &m,
const int &n)
1041 #if(CXSC_INDEX_CHECK)
1046 explicit INLINE
cmatrix(
const int &m1,
const int &n1,
const int &m2,
const int &n2)
1048 #if(CXSC_INDEX_CHECK)
1105 INLINE ~
cmatrix() noexcept {
delete [] dat; }
1148 #if(CXSC_INDEX_CHECK)
1155 #if(CXSC_INDEX_CHECK)
1162 #if(CXSC_INDEX_CHECK)
1169 #if(CXSC_INDEX_CHECK)
1178 #if(CXSC_INDEX_CHECK)
1185 #if(CXSC_INDEX_CHECK)
1190 INLINE
operator void*() noexcept;
1208 int offset1,offset2,mxsize,mysize;
1209 int start1,end1,start2,end2,sxsize,sysize;
1213 #ifdef _CXSC_FRIEND_TPL
1215 template <
class V,
class MS,
class S>
friend void _vmsconstr(V &v,
const MS &m)
1216 #if(CXSC_INDEX_CHECK)
1221 template <
class MS,
class M>
friend MS &_msmassign(MS &ms,
const M &m)
1222 #if(CXSC_INDEX_CHECK)
1227 template <
class MS1,
class MS2>
friend MS1 &_msmsassign(MS1 &ms1,
const MS2 &ms)
1228 #if(CXSC_INDEX_CHECK)
1233 template <
class M,
class MS2,
class S>
friend M &_mmsassign(M &m,
const MS2 &ms) noexcept;
1234 template <
class MS,
class S>
friend MS &_mssassign(MS &ms,
const S &r) noexcept;
1236 template <
class MS>
friend int _mslb(
const MS &ms,
const int &i)
1237 #if(CXSC_INDEX_CHECK)
1242 template <
class MS>
friend int _msub(
const MS &ms,
const int &i)
1243 #if(CXSC_INDEX_CHECK)
1248 template <
class MS,
class E>
friend E _msre(
const MS &ms) noexcept;
1249 template <
class MS,
class E>
friend E _msim(
const MS &ms) noexcept;
1250 template <
class MS1,
class M2>
friend MS1 &_msmsetre(MS1 &ms1,
const M2 &m2)
1251 #if(CXSC_INDEX_CHECK)
1256 template <
class MS1,
class M2>
friend MS1 &_msmsetim(MS1 &ms1,
const M2 &m2)
1257 #if(CXSC_INDEX_CHECK)
1262 template <
class MS1,
class MS2>
friend MS1 &_msmssetre(MS1 &ms1,
const MS2 &ms2)
1263 #if(CXSC_INDEX_CHECK)
1268 template <
class MS1,
class MS2>
friend MS1 &_msmssetim(MS1 &ms1,
const MS2 &ms2)
1269 #if(CXSC_INDEX_CHECK)
1274 template <
class MS,
class E>
friend E _msabs(
const MS &ms) noexcept;
1276 template <
class MS,
class E>
friend E _msminus(
const MS &ms) noexcept;
1277 template <
class M,
class MS,
class E>
friend E _mmsplus(
const M &m,
const MS &ms)
1278 #if(CXSC_INDEX_CHECK)
1283 template <
class MS1,
class MS2,
class E>
friend E _msmsplus(
const MS1 &m1,
const MS2 &m2)
1284 #if(CXSC_INDEX_CHECK)
1289 template <
class M,
class MS>
friend M &_mmsplusassign(M &m1,
const MS &ms)
1290 #if(CXSC_INDEX_CHECK)
1295 template <
class MS,
class M>
friend MS &_msmplusassign(MS &ms,
const M &m1)
1296 #if(CXSC_INDEX_CHECK)
1301 template <
class MS1,
class MS2>
friend MS1 &_msmsplusassign(MS1 &ms1,
const MS2 &ms2)
1302 #if(CXSC_INDEX_CHECK)
1307 template <
class M,
class MS,
class E>
friend E _mmsminus(
const M &m,
const MS &ms)
1308 #if(CXSC_INDEX_CHECK)
1313 template <
class MS,
class M,
class E>
friend E _msmminus(
const MS &ms,
const M &m)
1314 #if(CXSC_INDEX_CHECK)
1319 template <
class MS1,
class MS2,
class E>
friend E _msmsminus(
const MS1 &ms1,
const MS2 &ms2)
1320 #if(CXSC_INDEX_CHECK)
1325 template <
class M,
class MS>
friend M &_mmsminusassign(M &m1,
const MS &ms)
1326 #if(CXSC_INDEX_CHECK)
1331 template <
class MS,
class M>
friend MS &_msmminusassign(MS &ms,
const M &m1)
1332 #if(CXSC_INDEX_CHECK)
1337 template <
class MS1,
class MS2>
friend MS1 &_msmsminusassign(MS1 &ms1,
const MS2 &ms2)
1338 #if(CXSC_INDEX_CHECK)
1343 template <
class M,
class MS,
class E>
friend E _mmscmult(
const M &m1,
const MS &ms)
1344 #if(CXSC_INDEX_CHECK)
1349 template <
class M,
class MS,
class E>
friend E _mmscimult(
const M &m1,
const MS &ms)
1350 #if(CXSC_INDEX_CHECK)
1355 template <
class MS,
class M,
class E>
friend E _msmcmult(
const MS &ms,
const M &m2)
1356 #if(CXSC_INDEX_CHECK)
1361 template <
class MS,
class M,
class E>
friend E _msmcimult(
const MS &ms,
const M &m2)
1362 #if(CXSC_INDEX_CHECK)
1367 template <
class M,
class MS,
class S>
friend M &_mmscmultassign(M &m1,
const MS &ms)
1368 #if(CXSC_INDEX_CHECK)
1373 template <
class M,
class MS,
class S>
friend M &_mmscimultassign(M &m1,
const MS &ms)
1374 #if(CXSC_INDEX_CHECK)
1379 template <
class MS1,
class MS2,
class E>
friend E _msmscmult(
const MS1 &ms1,
const MS2 &ms2)
1380 #if(CXSC_INDEX_CHECK)
1385 template <
class MS1,
class MS2,
class E>
friend E _msmscimult(
const MS1 &ms1,
const MS2 &ms2)
1386 #if(CXSC_INDEX_CHECK)
1391 template <
class M,
class MS,
class E>
friend E _mmsconv(
const M &m,
const MS &ms)
1392 #if(CXSC_INDEX_CHECK)
1397 template <
class MS1,
class MS2,
class E>
friend E _msmsconv(
const MS1 &m1,
const MS2 &m2)
1398 #if(CXSC_INDEX_CHECK)
1404 template <
class MS,
class V,
class E>
friend E _msvcmult(
const MS &ms,
const V &v)
1405 #if(CXSC_INDEX_CHECK)
1410 template <
class MS,
class V,
class E>
friend E _msvcimult(
const MS &ms,
const V &v)
1411 #if(CXSC_INDEX_CHECK)
1416 template <
class V,
class MS,
class E>
friend E _vmscmult(
const V &v,
const MS &ms)
1417 #if(CXSC_INDEX_CHECK)
1422 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
1423 #if(CXSC_INDEX_CHECK)
1428 template <
class V,
class MS,
class S>
friend V &_vmscmultassign(V &v,
const MS &ms)
1429 #if(CXSC_INDEX_CHECK)
1434 template <
class V,
class MS,
class S>
friend V &_vmscimultassign(V &v,
const MS &ms)
1435 #if(CXSC_INDEX_CHECK)
1441 template <
class S,
class MS,
class E>
friend E _smsmult(
const S &c,
const MS &ms) noexcept;
1442 template <
class MS,
class S>
friend MS &_mssmultassign(MS &ms,
const S &c) noexcept;
1443 template <
class MS,
class S,
class E>
friend E _mssdiv(
const MS &ms,
const S &c) noexcept;
1444 template <
class MS,
class S>
friend MS &_mssdivassign(MS &ms,
const S &c) noexcept;
1446 template <
class MS>
friend void *_msvoid(
const MS &ms) noexcept;
1447 template <
class MS>
friend bool _msnot(
const MS &ms) noexcept;
1448 template <
class M,
class MS>
friend bool _mmseq(
const M &m1,
const MS &ms) noexcept;
1449 template <
class M,
class MS>
friend bool _mmsneq(
const M &m1,
const MS &ms) noexcept;
1450 template <
class M,
class MS>
friend bool _mmsless(
const M &m1,
const MS &ms) noexcept;
1451 template <
class M,
class MS>
friend bool _mmsleq(
const M &m1,
const MS &ms) noexcept;
1452 template <
class MS,
class M>
friend bool _msmless(
const MS &ms,
const M &m1) noexcept;
1453 template <
class MS,
class M>
friend bool _msmleq(
const MS &ms,
const M &m1) noexcept;
1454 template <
class MS1,
class MS2>
friend bool _msmseq(
const MS1 &ms1,
const MS2 &ms2) noexcept;
1455 template <
class MS1,
class MS2>
friend bool _msmsneq(
const MS1 &ms1,
const MS2 &ms2) noexcept;
1456 template <
class MS1,
class MS2>
friend bool _msmsless(
const MS1 &ms1,
const MS2 &ms2) noexcept;
1457 template <
class MS1,
class MS2>
friend bool _msmsleq(
const MS1 &ms1,
const MS2 &ms2) noexcept;
1458 template <
class MS>
friend std::ostream &_msout(std::ostream &s,
const MS &r) noexcept;
1459 template <
class MS>
friend std::istream &_msin(std::istream &s,MS &r) noexcept;
1469 template <
class M,
class MS,
class E>
friend E _mmssect(
const M &m,
const MS &ms)
1470 #if(CXSC_INDEX_CHECK)
1475 template <
class MS1,
class MS2,
class E>
friend E _msmssect(
const MS1 &m1,
const MS2 &m2)
1476 #if(CXSC_INDEX_CHECK)
1486 template <
class M1,
class MS2>
friend M1 &_mmssetinf(M1 &m1,
const MS2 &ms2)
1487 #if(CXSC_INDEX_CHECK)
1492 template <
class M1,
class MS2>
friend M1 &_mmssetsup(M1 &m1,
const MS2 &ms2)
1493 #if(CXSC_INDEX_CHECK)
1498 template <
class M1,
class MS2>
friend M1 &_mmsusetinf(M1 &m1,
const MS2 &ms2)
1499 #if(CXSC_INDEX_CHECK)
1504 template <
class M1,
class MS2>
friend M1 &_mmsusetsup(M1 &m1,
const MS2 &ms2)
1505 #if(CXSC_INDEX_CHECK)
1510 template <
class MS1,
class MS2>
friend MS1 &_msmssetinf(MS1 &ms1,
const MS2 &ms2)
1511 #if(CXSC_INDEX_CHECK)
1516 template <
class MS1,
class MS2>
friend MS1 &_msmssetsup(MS1 &ms1,
const MS2 &ms2)
1517 #if(CXSC_INDEX_CHECK)
1522 template <
class MS1,
class MS2>
friend MS1 &_msmsusetinf(MS1 &ms1,
const MS2 &ms2)
1523 #if(CXSC_INDEX_CHECK)
1528 template <
class MS1,
class MS2>
friend MS1 &_msmsusetsup(MS1 &ms1,
const MS2 &ms2)
1529 #if(CXSC_INDEX_CHECK)
1537 template <
class M,
class MS>
friend M &_mmsconvassign(M &m1,
const MS &ms)
1538 #if(CXSC_INDEX_CHECK)
1543 template <
class MS1,
class MS2>
friend MS1 &_msmsconvassign(MS1 &ms1,
const MS2 &ms2)
1544 #if(CXSC_INDEX_CHECK)
1550 template <
class M,
class MS>
friend M &_mmssectassign(M &m1,
const MS &ms)
1551 #if(CXSC_INDEX_CHECK)
1556 template <
class MS1,
class MS2>
friend MS1 &_msmssectassign(MS1 &ms1,
const MS2 &ms2)
1557 #if(CXSC_INDEX_CHECK)
1579 explicit INLINE
cmatrix_slice(
cmatrix &a,
const int &l1,
const int &u1,
const int &l2,
const int &u2) noexcept:dat(a.dat),offset1(l1-a.lb1),offset2(l2-a.lb2),mxsize(a.xsize),mysize(a.ysize),start1(l1),end1(u1),start2(l2),end2(u2),sxsize(u2-l2+1),sysize(u1-l1+1) { }
1581 explicit INLINE
cmatrix_slice(
cmatrix_slice &a,
const int &l1,
const int &u1,
const int &l2,
const int &u2) noexcept:dat(a.dat),offset1(a.offset1+l1-a.start1),offset2(a.offset2+l2-a.start2),mxsize(a.mxsize),mysize(a.mysize),start1(l1),end1(u1),start2(l2),end2(u2),sxsize(u2-l2+1),sysize(u1-l1+1) { }
1584 INLINE
cmatrix_slice(
const cmatrix_slice &ms) noexcept:dat(ms.dat),offset1(ms.offset1),offset2(ms.offset2),mxsize(ms.mxsize),mysize(ms.mysize),start1(ms.start1),end1(ms.end1),start2(ms.start2),end2(ms.end2),sxsize(ms.sxsize),sysize(ms.sysize) { }
1590 #if(CXSC_INDEX_CHECK)
1598 #if(CXSC_INDEX_CHECK)
1617 #if(CXSC_INDEX_CHECK)
1626 #if(CXSC_INDEX_CHECK)
1633 #if(CXSC_INDEX_CHECK)
1640 #if(CXSC_INDEX_CHECK)
1647 #if(CXSC_INDEX_CHECK)
1656 #if(CXSC_INDEX_CHECK)
1663 #if(CXSC_INDEX_CHECK)
1670 #if(CXSC_INDEX_CHECK)
1677 #if(CXSC_INDEX_CHECK)
1685 #if(CXSC_INDEX_CHECK)
1692 #if(CXSC_INDEX_CHECK)
1701 #if(CXSC_INDEX_CHECK)
1708 #if(CXSC_INDEX_CHECK)
1742 #if(CXSC_INDEX_CHECK)
1749 #if(CXSC_INDEX_CHECK)
1756 #if(CXSC_INDEX_CHECK)
1763 #if(CXSC_INDEX_CHECK)
1770 #if(CXSC_INDEX_CHECK)
1777 #if(CXSC_INDEX_CHECK)
1784 #if(CXSC_INDEX_CHECK)
1791 #if(CXSC_INDEX_CHECK)
1798 #if(CXSC_INDEX_CHECK)
1805 #if(CXSC_INDEX_CHECK)
1812 #if(CXSC_INDEX_CHECK)
1819 #if(CXSC_INDEX_CHECK)
1826 #if(CXSC_INDEX_CHECK)
1833 #if(CXSC_INDEX_CHECK)
1840 #if(CXSC_INDEX_CHECK)
1847 #if(CXSC_INDEX_CHECK)
1860 INLINE
operator void*() noexcept;
1871 INLINE cvector
operator /(
const cmatrix_subv &rv,
const complex &s) noexcept;
1873 INLINE cvector
operator *(
const cmatrix_subv &rv,
const complex &s) noexcept;
1875 INLINE cvector
operator *(
const complex &s,
const cmatrix_subv &rv) noexcept;
1880 INLINE rvector
abs(
const cmatrix_subv &mv) noexcept;
1882 INLINE rvector Im(
const cmatrix_subv &mv) noexcept;
1884 INLINE rvector Re(
const cmatrix_subv &mv) noexcept;
1886 INLINE cmatrix_subv &SetIm(cmatrix_subv &mv,
const rvector &rv)
1887 #if(CXSC_INDEX_CHECK)
1892 INLINE cmatrix_subv &SetRe(cmatrix_subv &mv,
const rvector &rv)
1894 #if(CXSC_INDEX_CHECK)
1899 INLINE cmatrix_subv &SetRe(cmatrix_subv &iv,
const real &r) noexcept;
1902 INLINE cmatrix_subv &SetIm(cmatrix_subv &iv,
const real &r) noexcept;
1906 void accumulate(cdotprecision &dp,
const cmatrix_subv & rv1,
const cmatrix_subv &rv2)
1907 #if(CXSC_INDEX_CHECK)
1914 void accumulate_approx(cdotprecision &dp,
const cmatrix_subv & rv1,
const cmatrix_subv &rv2);
1917 void accumulate(cdotprecision &dp,
const cvector & rv1,
const cmatrix_subv &rv2)
1918 #if(CXSC_INDEX_CHECK)
1925 void accumulate_approx(cdotprecision &dp,
const cvector & rv1,
const cmatrix_subv &rv2);
1928 void accumulate(cdotprecision &dp,
const cmatrix_subv & rv1,
const cvector &rv2)
1929 #if(CXSC_INDEX_CHECK)
1936 void accumulate_approx(cdotprecision &dp,
const cmatrix_subv & rv1,
const cvector &rv2);
1939 void accumulate(cdotprecision &dp,
const cvector_slice & sl1,
const cmatrix_subv &rv2)
1940 #if(CXSC_INDEX_CHECK)
1947 void accumulate_approx(cdotprecision &dp,
const cvector_slice & sl1,
const cmatrix_subv &rv2);
1950 void accumulate(cdotprecision &dp,
const cmatrix_subv & rv1,
const cvector_slice &sl2)
1951 #if(CXSC_INDEX_CHECK)
1958 void accumulate_approx(cdotprecision &dp,
const cmatrix_subv & rv1,
const cvector_slice &sl2);
1962 void accumulate(cidotprecision &dp,
const cmatrix_subv & rv1,
const cmatrix_subv &rv2)
1963 #if(CXSC_INDEX_CHECK)
1968 void accumulate(cidotprecision &dp,
const cvector & rv1,
const cmatrix_subv &rv2)
1970 #if(CXSC_INDEX_CHECK)
1975 void accumulate(cidotprecision &dp,
const cmatrix_subv & rv1,
const cvector &rv2)
1977 #if(CXSC_INDEX_CHECK)
1982 void accumulate(cidotprecision &dp,
const cvector_slice & sl1,
const cmatrix_subv &rv2)
1984 #if(CXSC_INDEX_CHECK)
1989 void accumulate(cidotprecision &dp,
const cmatrix_subv & rv1,
const cvector_slice &sl2)
1991 #if(CXSC_INDEX_CHECK)
1998 INLINE complex
operator *(
const cmatrix_subv & rv1,
const cmatrix_subv &rv2)
1999 #if(CXSC_INDEX_CHECK)
2004 INLINE complex
operator *(
const cvector & rv1,
const cmatrix_subv &rv2)
2006 #if(CXSC_INDEX_CHECK)
2011 INLINE complex
operator *(
const cmatrix_subv &rv1,
const cvector &rv2)
2013 #if(CXSC_INDEX_CHECK)
2018 INLINE complex
operator *(
const cvector_slice &sl,
const cmatrix_subv &sv)
2020 #if(CXSC_INDEX_CHECK)
2025 INLINE complex
operator *(
const cmatrix_subv &mv,
const cvector_slice &vs)
2027 #if(CXSC_INDEX_CHECK)
2034 INLINE cvector operator +(
const cmatrix_subv & rv1,
const cmatrix_subv &rv2)
2035 #if(CXSC_INDEX_CHECK)
2040 INLINE cvector operator +(
const cmatrix_subv &rv1,
const cvector &rv2)
2042 #if(CXSC_INDEX_CHECK)
2047 INLINE cvector operator +(
const cvector & rv1,
const cmatrix_subv &rv2)
2049 #if(CXSC_INDEX_CHECK)
2054 INLINE cvector operator +(
const cvector_slice &sl,
const cmatrix_subv &mv)
2056 #if(CXSC_INDEX_CHECK)
2061 INLINE cvector operator +(
const cmatrix_subv &mv,
const cvector_slice &sl)
2063 #if(CXSC_INDEX_CHECK)
2070 INLINE cvector operator -(
const cmatrix_subv & rv1,
const cmatrix_subv &rv2)
2071 #if(CXSC_INDEX_CHECK)
2076 INLINE cvector operator -(
const cvector & rv1,
const cmatrix_subv &rv2)
2078 #if(CXSC_INDEX_CHECK)
2083 INLINE cvector operator -(
const cmatrix_subv &rv1,
const cvector &rv2)
2085 #if(CXSC_INDEX_CHECK)
2090 INLINE cvector operator -(
const cvector_slice &sl,
const cmatrix_subv &mv)
2092 #if(CXSC_INDEX_CHECK)
2097 INLINE cvector operator -(
const cmatrix_subv &mv,
const cvector_slice &sl)
2099 #if(CXSC_INDEX_CHECK)
2109 INLINE cmatrix
_cmatrix(
const cmatrix &rm) noexcept;
2111 INLINE cmatrix
_cmatrix(
const cvector &v) noexcept;
2113 INLINE cmatrix
_cmatrix(
const cvector_slice &v) noexcept;
2115 INLINE cmatrix
_cmatrix(
const complex &r) noexcept;
2118 INLINE
int Lb(
const cmatrix &rm,
const int &i)
2119 #if(CXSC_INDEX_CHECK)
2124 INLINE
int Ub(
const cmatrix &rm,
const int &i)
2126 #if(CXSC_INDEX_CHECK)
2131 INLINE
int Lb(
const cmatrix_slice &rm,
const int &i)
2133 #if(CXSC_INDEX_CHECK)
2138 INLINE
int Ub(
const cmatrix_slice &rm,
const int &i)
2140 #if(CXSC_INDEX_CHECK)
2145 INLINE cmatrix &
SetLb(cmatrix &m,
const int &i,
const int &j)
2147 #if(CXSC_INDEX_CHECK)
2152 INLINE cmatrix &
SetUb(cmatrix &m,
const int &i,
const int &j)
2154 #if(CXSC_INDEX_CHECK)
2159 INLINE
void Resize(cmatrix &A) noexcept;
2162 INLINE
void Resize(cmatrix &A,
const int &m,
const int &n)
2163 #if(CXSC_INDEX_CHECK)
2168 INLINE
void Resize(cmatrix &A,
const int &m1,
const int &m2,
const int &n1,
const int &n2)
2170 #if(CXSC_INDEX_CHECK)
2177 INLINE rmatrix
abs(
const cmatrix &m) noexcept;
2179 INLINE rmatrix
abs(
const cmatrix_slice &ms) noexcept;
2181 INLINE rmatrix Im(
const cmatrix &m) noexcept;
2183 INLINE rmatrix Re(
const cmatrix &m) noexcept;
2185 INLINE rmatrix Im(
const cmatrix_slice &m) noexcept;
2187 INLINE rmatrix Re(
const cmatrix_slice &m) noexcept;
2189 INLINE cmatrix &SetIm(cmatrix &cm,
const rmatrix &rm)
2190 #if(CXSC_INDEX_CHECK)
2195 INLINE cmatrix_slice &SetIm(cmatrix_slice &cm,
const rmatrix &rm)
2197 #if(CXSC_INDEX_CHECK)
2202 INLINE cmatrix &SetIm(cmatrix &cm,
const rmatrix_slice &rm)
2204 #if(CXSC_INDEX_CHECK)
2209 INLINE cmatrix_slice &SetIm(cmatrix_slice &cm,
const rmatrix_slice &rm)
2211 #if(CXSC_INDEX_CHECK)
2216 INLINE cmatrix &SetRe(cmatrix &cm,
const rmatrix &rm)
2218 #if(CXSC_INDEX_CHECK)
2223 INLINE cmatrix_slice &SetRe(cmatrix_slice &cm,
const rmatrix &rm)
2225 #if(CXSC_INDEX_CHECK)
2230 INLINE cmatrix &SetRe(cmatrix &cm,
const rmatrix_slice &rm)
2232 #if(CXSC_INDEX_CHECK)
2237 INLINE cmatrix_slice &SetRe(cmatrix_slice &cm,
const rmatrix_slice &rm)
2239 #if(CXSC_INDEX_CHECK)
2248 INLINE cmatrix
operator *(
const complex &c,
const cmatrix &m) noexcept;
2250 INLINE cmatrix
operator *(
const complex &c,
const cmatrix_slice &ms) noexcept;
2252 INLINE cmatrix
operator *(
const cmatrix &m,
const complex &c) noexcept;
2254 INLINE cmatrix
operator *(
const cmatrix_slice &ms,
const complex &c) noexcept;
2256 INLINE cmatrix &
operator *=(cmatrix &m,
const complex &c) noexcept;
2258 INLINE cmatrix
operator /(
const cmatrix &m,
const complex &c) noexcept;
2260 INLINE cmatrix
operator /(
const cmatrix_slice &ms,
const complex &c) noexcept;
2262 INLINE cmatrix &
operator /=(cmatrix &m,
const complex &c) noexcept;
2267 INLINE cmatrix
operator *(
const real &c,
const cmatrix &m) noexcept;
2269 INLINE cmatrix
operator *(
const real &c,
const cmatrix_slice &ms) noexcept;
2271 INLINE cmatrix
operator *(
const cmatrix &m,
const real &c) noexcept;
2273 INLINE cmatrix
operator *(
const cmatrix_slice &ms,
const real &c) noexcept;
2275 INLINE cmatrix &
operator *=(cmatrix &m,
const real &c) noexcept;
2277 INLINE cmatrix
operator /(
const cmatrix &m,
const real &c) noexcept;
2279 INLINE cmatrix
operator /(
const cmatrix_slice &ms,
const real &c) noexcept;
2281 INLINE cmatrix &
operator /=(cmatrix &m,
const real &c) noexcept;
2285 INLINE cmatrix
operator *(
const complex &c,
const rmatrix &m) noexcept;
2287 INLINE cmatrix
operator *(
const complex &c,
const rmatrix_slice &ms) noexcept;
2289 INLINE cmatrix
operator *(
const rmatrix &m,
const complex &c) noexcept;
2291 INLINE cmatrix
operator *(
const rmatrix_slice &ms,
const complex &c) noexcept;
2293 INLINE cmatrix
operator /(
const rmatrix &m,
const complex &c) noexcept;
2295 INLINE cmatrix
operator /(
const rmatrix_slice &ms,
const complex &c) noexcept;
2302 INLINE cvector
operator *(
const cmatrix &m,
const cvector &v)
2303 #if(CXSC_INDEX_CHECK)
2308 INLINE cvector
operator *(
const cmatrix_slice &ms,
const cvector &v)
2310 #if(CXSC_INDEX_CHECK)
2315 INLINE cvector
operator *(
const cvector &v,
const cmatrix &m)
2317 #if(CXSC_INDEX_CHECK)
2322 INLINE cvector
operator *(
const cvector &v,
const cmatrix_slice &ms)
2324 #if(CXSC_INDEX_CHECK)
2329 INLINE cvector &
operator *=(cvector &v,
const cmatrix &m)
2331 #if(CXSC_INDEX_CHECK)
2336 INLINE cvector &
operator *=(cvector &v,
const cmatrix_slice &ms)
2338 #if(CXSC_INDEX_CHECK)
2345 INLINE cvector
operator *(
const cvector_slice &v,
const cmatrix &m)
2346 #if(CXSC_INDEX_CHECK)
2351 INLINE cvector
operator *(
const cvector_slice &v,
const cmatrix_slice &m)
2353 #if(CXSC_INDEX_CHECK)
2362 INLINE cvector
operator *(
const rvector &v,
const cmatrix &m)
2363 #if(CXSC_INDEX_CHECK)
2368 INLINE cvector
operator *(
const rvector &v,
const cmatrix_slice &ms)
2370 #if(CXSC_INDEX_CHECK)
2375 INLINE cvector
operator *(
const rvector_slice &v,
const cmatrix &m)
2377 #if(CXSC_INDEX_CHECK)
2384 INLINE cvector
operator *(
const cmatrix &m,
const rvector &v)
2385 #if(CXSC_INDEX_CHECK)
2390 INLINE cvector
operator *(
const cmatrix_slice &ms,
const rvector &v)
2392 #if(CXSC_INDEX_CHECK)
2402 INLINE
const cmatrix &operator +(
const cmatrix &m1) noexcept;
2404 INLINE cmatrix operator +(
const cmatrix_slice &ms) noexcept;
2406 INLINE cmatrix operator +(
const cmatrix &m1,
const cmatrix &m2)
2407 #if(CXSC_INDEX_CHECK)
2412 INLINE cmatrix operator +(
const cmatrix &m,
const cmatrix_slice &ms)
2414 #if(CXSC_INDEX_CHECK)
2419 INLINE cmatrix operator +(
const cmatrix_slice &ms,
const cmatrix &m)
2421 #if(CXSC_INDEX_CHECK)
2426 INLINE cmatrix operator +(
const cmatrix_slice &m1,
const cmatrix_slice &m2)
2428 #if(CXSC_INDEX_CHECK)
2433 INLINE cmatrix &
operator +=(cmatrix &m1,
const cmatrix &m2)
2435 #if(CXSC_INDEX_CHECK)
2440 INLINE cmatrix &
operator +=(cmatrix &m1,
const cmatrix_slice &ms)
2442 #if(CXSC_INDEX_CHECK)
2449 INLINE cmatrix operator -(
const cmatrix &m) noexcept;
2451 INLINE cmatrix operator -(
const cmatrix_slice &ms) noexcept;
2453 INLINE cmatrix operator -(
const cmatrix &m1,
const cmatrix &m2)
2454 #if(CXSC_INDEX_CHECK)
2459 INLINE cmatrix operator -(
const cmatrix &m,
const cmatrix_slice &ms)
2461 #if(CXSC_INDEX_CHECK)
2466 INLINE cmatrix operator -(
const cmatrix_slice &ms,
const cmatrix &m)
2468 #if(CXSC_INDEX_CHECK)
2473 INLINE cmatrix operator -(
const cmatrix_slice &ms1,
const cmatrix_slice &ms2)
2475 #if(CXSC_INDEX_CHECK)
2480 INLINE cmatrix &operator -=(cmatrix &m1,
const cmatrix &m2)
2482 #if(CXSC_INDEX_CHECK)
2487 INLINE cmatrix &operator -=(cmatrix &m1,
const cmatrix_slice &ms)
2489 #if(CXSC_INDEX_CHECK)
2496 INLINE cmatrix
operator *(
const cmatrix &m1,
const cmatrix &m2)
2497 #if(CXSC_INDEX_CHECK)
2502 INLINE cmatrix
operator *(
const cmatrix &m1,
const cmatrix_slice &ms)
2504 #if(CXSC_INDEX_CHECK)
2509 INLINE cmatrix
operator *(
const cmatrix_slice &ms,
const cmatrix &m1)
2511 #if(CXSC_INDEX_CHECK)
2516 INLINE cmatrix
operator *(
const cmatrix_slice &ms1,
const cmatrix_slice &ms2)
2518 #if(CXSC_INDEX_CHECK)
2523 INLINE cmatrix &
operator *=(cmatrix &m1,
const cmatrix &m2)
2525 #if(CXSC_INDEX_CHECK)
2530 INLINE cmatrix &
operator *=(cmatrix &m1,
const cmatrix_slice &ms)
2532 #if(CXSC_INDEX_CHECK)
2541 INLINE cmatrix operator +(
const rmatrix &m1,
const cmatrix &m2)
2542 #if(CXSC_INDEX_CHECK)
2547 INLINE cmatrix operator +(
const cmatrix &m1,
const rmatrix &m2)
2549 #if(CXSC_INDEX_CHECK)
2554 INLINE cmatrix operator +(
const rmatrix &m,
const cmatrix_slice &ms)
2556 #if(CXSC_INDEX_CHECK)
2561 INLINE cmatrix operator +(
const cmatrix &m,
const rmatrix_slice &ms)
2563 #if(CXSC_INDEX_CHECK)
2568 INLINE cmatrix operator +(
const rmatrix_slice &ms,
const cmatrix &m)
2570 #if(CXSC_INDEX_CHECK)
2575 INLINE cmatrix operator +(
const cmatrix_slice &ms,
const rmatrix &m)
2577 #if(CXSC_INDEX_CHECK)
2582 INLINE cmatrix operator +(
const rmatrix_slice &m1,
const cmatrix_slice &m2)
2584 #if(CXSC_INDEX_CHECK)
2589 INLINE cmatrix operator +(
const cmatrix_slice &m1,
const rmatrix_slice &m2)
2591 #if(CXSC_INDEX_CHECK)
2596 INLINE cmatrix &
operator +=(cmatrix &m1,
const rmatrix &m2)
2598 #if(CXSC_INDEX_CHECK)
2603 INLINE cmatrix &
operator +=(cmatrix &m1,
const rmatrix_slice &ms)
2605 #if(CXSC_INDEX_CHECK)
2612 INLINE cmatrix operator -(
const rmatrix &m1,
const cmatrix &m2)
2613 #if(CXSC_INDEX_CHECK)
2618 INLINE cmatrix operator -(
const cmatrix &m1,
const rmatrix &m2)
2620 #if(CXSC_INDEX_CHECK)
2625 INLINE cmatrix operator -(
const rmatrix &m,
const cmatrix_slice &ms)
2627 #if(CXSC_INDEX_CHECK)
2632 INLINE cmatrix operator -(
const cmatrix &m,
const rmatrix_slice &ms)
2634 #if(CXSC_INDEX_CHECK)
2639 INLINE cmatrix operator -(
const rmatrix_slice &ms,
const cmatrix &m)
2641 #if(CXSC_INDEX_CHECK)
2646 INLINE cmatrix operator -(
const cmatrix_slice &ms,
const rmatrix &m)
2648 #if(CXSC_INDEX_CHECK)
2653 INLINE cmatrix operator -(
const rmatrix_slice &ms1,
const cmatrix_slice &ms2)
2655 #if(CXSC_INDEX_CHECK)
2660 INLINE cmatrix operator -(
const cmatrix_slice &ms1,
const rmatrix_slice &ms2)
2662 #if(CXSC_INDEX_CHECK)
2667 INLINE cmatrix &operator -=(cmatrix &m1,
const rmatrix &m2)
2669 #if(CXSC_INDEX_CHECK)
2674 INLINE cmatrix &operator -=(cmatrix &m1,
const rmatrix_slice &ms)
2676 #if(CXSC_INDEX_CHECK)
2683 INLINE cmatrix
operator *(
const rmatrix &m1,
const cmatrix &m2)
2684 #if(CXSC_INDEX_CHECK)
2689 INLINE cmatrix
operator *(
const cmatrix &m1,
const rmatrix &m2)
2691 #if(CXSC_INDEX_CHECK)
2696 INLINE cmatrix
operator *(
const rmatrix &m1,
const cmatrix_slice &ms)
2698 #if(CXSC_INDEX_CHECK)
2703 INLINE cmatrix
operator *(
const cmatrix &m1,
const rmatrix_slice &ms)
2705 #if(CXSC_INDEX_CHECK)
2710 INLINE cmatrix
operator *(
const rmatrix_slice &ms,
const cmatrix &m1)
2712 #if(CXSC_INDEX_CHECK)
2717 INLINE cmatrix
operator *(
const cmatrix_slice &ms,
const rmatrix &m1)
2719 #if(CXSC_INDEX_CHECK)
2724 INLINE cmatrix
operator *(
const rmatrix_slice &ms1,
const cmatrix_slice &ms2)
2726 #if(CXSC_INDEX_CHECK)
2731 INLINE cmatrix
operator *(
const cmatrix_slice &ms1,
const rmatrix_slice &ms2)
2733 #if(CXSC_INDEX_CHECK)
2738 INLINE cmatrix &
operator *=(cmatrix &m1,
const rmatrix &m2)
2740 #if(CXSC_INDEX_CHECK)
2745 INLINE cmatrix &
operator *=(cmatrix &m1,
const rmatrix_slice &ms)
2747 #if(CXSC_INDEX_CHECK)
2759 INLINE
bool operator ==(
const cmatrix &m1,
const cmatrix &m2) noexcept;
2761 INLINE
bool operator !=(
const cmatrix &m1,
const cmatrix &m2) noexcept;
2767 INLINE
bool operator ==(
const cmatrix &m1,
const cmatrix_slice &ms) noexcept;
2769 INLINE
bool operator !=(
const cmatrix &m1,
const cmatrix_slice &ms) noexcept;
2778 INLINE
bool operator ==(
const cmatrix_slice &m1,
const cmatrix_slice &m2) noexcept;
2780 INLINE
bool operator !=(
const cmatrix_slice &m1,
const cmatrix_slice &m2) noexcept;
2789 INLINE
bool operator !(
const cmatrix &ms) noexcept;
2791 INLINE
bool operator !(
const cmatrix_slice &ms) noexcept;
2796 INLINE std::ostream &operator <<(std::ostream &s,
const cmatrix &r) noexcept;
2798 INLINE std::ostream &operator <<(std::ostream &s,
const cmatrix_slice &r) noexcept;
2800 INLINE std::istream &operator >>(std::istream &s,cmatrix &r) noexcept;
2802 INLINE std::istream &operator >>(std::istream &s,cmatrix_slice &r) noexcept;
2805 INLINE
int RowLen (
const cmatrix& );
2807 INLINE
int ColLen (
const cmatrix& );
2809 INLINE
int RowLen (
const cmatrix_slice& );
2811 INLINE
int ColLen (
const cmatrix_slice& );
2813 rmatrix
CompMat (
const cmatrix& );
2815 cmatrix
Id ( cmatrix& );
2817 cmatrix
transp (
const cmatrix& );
2824 #ifdef _CXSC_INCL_INL
2825 #include "matrix.inl"
2826 #include "cmatrix.inl"
2829 #ifdef _CXSC_CIVECTOR_HPP_INCLUDED
2830 # ifdef _CXSC_INCL_INL
2831 # include "civeccmat.inl"
2833 # include "civeccmat.hpp"
2837 #ifdef _CXSC_IVECTOR_HPP_INCLUDED
2838 # ifdef _CXSC_INCL_INL
2839 # include "iveccmat.inl"
2841 # include "iveccmat.hpp"
2845 #ifdef _CXSC_IMATRIX_HPP_INCLUDED
2846 # ifdef _CXSC_INCL_INL
2847 # include "cmatimat.inl"
2849 # include "cmatimat.hpp"
2854 #ifdef CXSC_USE_BLAS
2855 #define _CXSC_BLAS_CMATRIX
2856 #include "cxsc_blas.inl"