26#ifndef _CXSC_LRMATRIX_HPP_INCLUDED
27#define _CXSC_LRMATRIX_HPP_INCLUDED
29#include "xscclass.hpp"
32#include "l_rvector.hpp"
55 int size,start,offset;
88template<
typename S,
typename T>
89friend inline void addDot(
const S &x,
const T &y,
dotprecision &val);
92#ifdef _CXSC_FRIEND_TPL
94template <
class MV1,
class MV2>
friend MV1 &_mvmvassign(MV1 &v,
const MV2 &rv)
100template <
class MV,
class S>
friend MV &_mvsassign(MV &v,
const S &r)
noexcept;
101template <
class MV,
class V>
friend MV &_mvvassign(MV &v,
const V &rv)
107template <
class V,
class MV2,
class S>
friend V &_vmvassign(V &v,
const MV2 &rv)
noexcept;
108template <
class MV,
class V>
friend V _mvabs(
const MV &mv)
noexcept;
109template <
class DP,
class V,
class SV>
friend void _vmvaccu(DP &dp,
const V & rv1,
const SV &rv2)
115template <
class DP,
class MV1,
class MV2>
friend void _mvmvaccu(DP &dp,
const MV1 & rv1,
const MV2 &rv2)
123 template <
class MV1,
class MV2,
class S>
friend S _mvmvlmult(
const MV1 & rv1,
const MV2 &rv2)
129 template <
class V,
class MV,
class S>
friend S _vmvlmult(
const V &rv1,
const MV &rv2)
135 template <
class MV,
class S,
class E>
friend E _mvsmult(
const MV &rv,
const S &s)
noexcept;
136 template <
class MV1,
class MV2,
class E>
friend E _mvmvplus(
const MV1 &rv1,
const MV2 &rv2)
142 template <
class MV1,
class MV2,
class E>
friend E _mvmvminus(
const MV1 &rv1,
const MV2 &rv2)
148 template <
class MV,
class V,
class E>
friend E _mvvplus(
const MV &rv1,
const V &rv2)
154 template <
class MV,
class V,
class E>
friend E _mvvminus(
const MV &rv1,
const V &rv2)
160 template <
class V,
class MV,
class E>
friend E _vmvminus(
const V &rv1,
const MV &rv2)
166 template <
class MV,
class S,
class E>
friend E _mvsdiv(
const MV &rv,
const S &s)
noexcept;
167template <
class MV,
class S>
friend MV &_mvsmultassign(MV &v,
const S &r)
noexcept;
168template <
class MV,
class S>
friend MV &_mvsplusassign(MV &v,
const S &r)
noexcept;
169template <
class MV,
class S>
friend MV &_mvsminusassign(MV &v,
const S &r)
noexcept;
170template <
class MV,
class S>
friend MV &_mvsdivassign(MV &v,
const S &r)
noexcept;
171template <
class MV,
class V>
friend MV &_mvvplusassign(MV &v,
const V &rv)
177template <
class V,
class MV>
friend V &_vmvplusassign(V &rv,
const MV &v)
183template <
class MV,
class V>
friend MV &_mvvminusassign(MV &v,
const V &rv)
189template <
class V,
class MV>
friend V &_vmvminusassign(V &rv,
const MV &v)
196template <
class V,
class MV>
friend V &_vmvsetinf(V &rv,
const MV &v)
202template <
class V,
class MV>
friend V &_vmvsetsup(V &rv,
const MV &v)
208template <
class V,
class MV>
friend V &_vmvusetinf(V &rv,
const MV &v)
214template <
class V,
class MV>
friend V &_vmvusetsup(V &rv,
const MV &v)
226 explicit INLINE
l_rmatrix_subv (
l_real *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) { }
422 int lb1,ub1,lb2,ub2,xsize,ysize;
426#ifdef _CXSC_FRIEND_TPL
428template <
class S,
class M>
friend void _smconstr(S &s,
const M &m)
434template <
class V,
class M,
class S>
friend void _vmconstr(V &v,
const M &m)
440 template <
class M1,
class M2,
class S>
friend M1 &_mmassign(M1 &m1,
const M2 &m,S ms)
noexcept;
441 template <
class M,
class MS2,
class S>
friend M &_mmsassign(M &m,
const MS2 &ms)
noexcept;
442 template <
class MS,
class M>
friend MS &_msmassign(MS &ms,
const M &m)
448 template <
class M,
class S>
friend M &_msassign(M &m,
const S &r)
noexcept;
449template <
class V,
class M,
class S>
friend V &_vmassign(V &v,
const M &m)
455template <
class M,
class V,
class S>
friend M &_mvassign(M &m,
const V &v)
noexcept;
456 template <
class M>
friend int _mlb(
const M &m,
const int &i)
462 template <
class M>
friend int _mub(
const M &m,
const int &i)
468 template <
class M>
friend M &_msetlb(M &m,
const int &i,
const int &j)
474 template <
class M>
friend M &_msetub(M &m,
const int &i,
const int &j)
480 template <
class M>
friend void _mresize(M &A)
noexcept;
481 template <
class M,
class S>
friend void _mresize(M &A,
const int &m,
const int &n)
487 template <
class M,
class S>
friend void _mresize(M &A,
const int &m1,
const int &m2,
const int &n1,
const int &n2)
493 template <
class M,
class E>
friend E _mabs(
const M &m)
noexcept;
494 template <
class MS,
class E>
friend E _msabs(
const MS &ms)
noexcept;
496 template <
class M1,
class M2,
class E>
friend E _mmplus(
const M1 &m1,
const M2 &m2)
502 template <
class M,
class MS,
class E>
friend E _mmsplus(
const M &m,
const MS &ms)
508 template <
class M>
friend M _mminus(
const M &m)
noexcept;
509 template <
class MS,
class E>
friend E _msminus(
const MS &ms)
noexcept;
510 template <
class M1,
class M2,
class E>
friend E _mmminus(
const M1 &m1,
const M2 &m2)
516 template <
class M1,
class M2>
friend M1 &_mmplusassign(M1 &m1,
const M2 &m2)
522 template <
class M,
class MS>
friend M &_mmsplusassign(M &m1,
const MS &ms)
528 template <
class MS,
class M>
friend MS &_msmplusassign(MS &ms,
const M &m1)
534 template <
class MS1,
class MS2,
class E>
friend E _msmsplus(
const MS1 &m1,
const MS2 &m2)
540 template <
class M,
class MS,
class E>
friend E _mmsminus(
const M &m,
const MS &ms)
546 template <
class MS,
class M,
class E>
friend E _msmminus(
const MS &ms,
const M &m)
552 template <
class MS1,
class MS2,
class E>
friend E _msmsminus(
const MS1 &ms1,
const MS2 &ms2)
558 template <
class M1,
class M2>
friend M1 &_mmminusassign(M1 &m1,
const M2 &m2)
564 template <
class M,
class MS>
friend M &_mmsminusassign(M &m1,
const MS &ms)
570 template <
class MS,
class M>
friend MS &_msmminusassign(MS &ms,
const M &m1)
576 template <
class M1,
class M2,
class E>
friend E _mmlmult(
const M1 &m1,
const M2 &m2)
582 template <
class M1,
class M2,
class S>
friend M1 &_mmlmultassign(M1 &m1,
const M2 &m2)
588 template <
class M,
class MS,
class E>
friend E _mmslmult(
const M &m1,
const MS &ms)
594 template <
class MS,
class M,
class E>
friend E _msmlmult(
const MS &ms,
const M &m2)
600 template <
class M,
class MS,
class S>
friend M &_mmslmultassign(M &m1,
const MS &ms)
606 template <
class MS1,
class MS2,
class E>
friend E _msmslmult(
const MS1 &ms1,
const MS2 &ms2)
612 template <
class M1,
class M2,
class E>
friend E _mmconv(
const M1 &m1,
const M2 &m2)
618 template <
class M,
class MS,
class E>
friend E _mmsconv(
const M &m,
const MS &ms)
625 template <
class S,
class M,
class E>
friend E _smmult(
const S &c,
const M &m)
noexcept;
626 template <
class M,
class S>
friend M &_msmultassign(M &m,
const S &c)
noexcept;
627 template <
class S,
class MS,
class E>
friend E _smsmult(
const S &c,
const MS &ms)
noexcept;
628 template <
class M,
class S,
class E>
friend E _msdiv(
const M &m,
const S &c)
noexcept;
629 template <
class M,
class S>
friend M &_msdivassign(M &m,
const S &c)
noexcept;
630 template <
class MS,
class S,
class E>
friend E _mssdiv(
const MS &ms,
const S &c)
noexcept;
632 template <
class M,
class V,
class E>
friend E _mvlmult(
const M &m,
const V &v)
638 template <
class V,
class M,
class E>
friend E _vmlmult(
const V &v,
const M &m)
644 template <
class V,
class M,
class S>
friend V &_vmlmultassign(V &v,
const M &m)
650 template <
class VS,
class M,
class S>
friend VS &_vsmlmultassign(VS &v,
const M &m)
657 template <
class M>
friend void *_mvoid(
const M &m)
noexcept;
658 template <
class M>
friend bool _mnot(
const M &m)
noexcept;
659 template <
class MS>
friend void *_msvoid(
const MS &ms)
noexcept;
660 template <
class MS>
friend bool _msnot(
const MS &ms)
noexcept;
661 template <
class M1,
class M2>
friend bool _mmeq(
const M1 &m1,
const M2 &m2)
noexcept;
662 template <
class M1,
class M2>
friend bool _mmneq(
const M1 &m1,
const M2 &m2)
noexcept;
663 template <
class M1,
class M2>
friend bool _mmless(
const M1 &m1,
const M2 &m2)
noexcept;
664 template <
class M1,
class M2>
friend bool _mmleq(
const M1 &m1,
const M2 &m2)
noexcept;
665 template <
class M,
class MS>
friend bool _mmseq(
const M &m1,
const MS &ms)
noexcept;
666 template <
class M,
class MS>
friend bool _mmsneq(
const M &m1,
const MS &ms)
noexcept;
667 template <
class M,
class MS>
friend bool _mmsless(
const M &m1,
const MS &ms)
noexcept;
668 template <
class M,
class MS>
friend bool _mmsleq(
const M &m1,
const MS &ms)
noexcept;
669 template <
class MS,
class M>
friend bool _msmless(
const MS &ms,
const M &m1)
noexcept;
670 template <
class MS,
class M>
friend bool _msmleq(
const MS &ms,
const M &m1)
noexcept;
671 template <
class M>
friend std::ostream &_mout(std::ostream &s,
const M &r)
noexcept;
672 template <
class M>
friend std::istream &_min(std::istream &s,M &r)
noexcept;
675 template <
class MS,
class V,
class E>
friend E _msvlmult(
const MS &ms,
const V &v)
681 template <
class V,
class MS,
class E>
friend E _vmslmult(
const V &v,
const MS &ms)
688 template <
class M1,
class M2,
class E>
friend E _mmlimult(
const M1 &m1,
const M2 &m2)
695 template <
class M,
class MS,
class E>
friend E _mmslimult(
const M &m1,
const MS &ms)
702 template <
class MS,
class M,
class E>
friend E _msmlimult(
const MS &ms,
const M &m2)
709 template <
class MS1,
class MS2,
class E>
friend E _msmslimult(
const MS1 &ms1,
const MS2 &ms2)
716 template <
class MS1,
class MS2,
class E>
friend E _msmsconv(
const MS1 &m1,
const MS2 &m2)
722 template <
class M1,
class M2,
class E>
friend E _mmsect(
const M1 &m1,
const M2 &m2)
728 template <
class M,
class MS,
class E>
friend E _mmssect(
const M &m,
const MS &ms)
735 template <
class MS1,
class MS2,
class E>
friend E _msmssect(
const MS1 &m1,
const MS2 &m2)
745 template <
class M,
class V,
class E>
friend E _mvlimult(
const M &m,
const V &v)
751 template <
class V,
class M,
class E>
friend E _vmlimult(
const V &v,
const M &m)
757 template <
class MS,
class V,
class E>
friend E _msvlimult(
const MS &ms,
const V &v)
766 template <
class M,
class E>
friend E _mdiam(
const M &m)
noexcept;
767 template <
class M,
class E>
friend E _mmid(
const M &m)
noexcept;
768 template <
class MS,
class E>
friend E _msdiam(
const MS &ms)
noexcept;
769 template <
class MS,
class E>
friend E _msmid(
const MS &ms)
noexcept;
770 template <
class M,
class E>
friend E _minf(
const M &m)
noexcept;
771 template <
class MS,
class E>
friend E _msinf(
const MS &ms)
noexcept;
772 template <
class M,
class E>
friend E _msup(
const M &m)
noexcept;
773 template <
class MS,
class E>
friend E _mssup(
const MS &ms)
noexcept;
774 template <
class M1,
class M2>
friend M1 &_mmsetinf(M1 &m1,
const M2 &m2)
780 template <
class M1,
class M2>
friend M1 &_mmsetsup(M1 &m1,
const M2 &m2)
786 template <
class M1,
class M2>
friend M1 &_mmusetinf(M1 &m1,
const M2 &m2)
792 template <
class M1,
class M2>
friend M1 &_mmusetsup(M1 &m1,
const M2 &m2)
798 template <
class MS1,
class M2>
friend MS1 &_msmsetinf(MS1 &ms1,
const M2 &m2)
804 template <
class MS1,
class M2>
friend MS1 &_msmsetsup(MS1 &ms1,
const M2 &m2)
810 template <
class MS1,
class M2>
friend MS1 &_msmusetinf(MS1 &ms1,
const M2 &m2)
816 template <
class MS1,
class M2>
friend MS1 &_msmusetsup(MS1 &ms1,
const M2 &m2)
823 template <
class M1,
class M2,
class S>
friend M1 &_mmlimultassign(M1 &m1,
const M2 &m2)
830 template <
class M,
class MS,
class S>
friend M &_mmslimultassign(M &m1,
const MS &ms)
837 template <
class M1,
class M2>
friend M1 &_mmconvassign(M1 &m1,
const M2 &m2)
843 template <
class M,
class MS>
friend M &_mmsconvassign(M &m1,
const MS &ms)
849 template <
class MS,
class M>
friend MS &_msmconvassign(MS &ms,
const M &m1)
856 template <
class M1,
class M2>
friend M1 &_mmsectassign(M1 &m1,
const M2 &m2)
862 template <
class M,
class MS>
friend M &_mmssectassign(M &m1,
const MS &ms)
868 template <
class MS,
class M>
friend MS &_msmsectassign(MS &ms,
const M &m1)
875 template <
class V,
class M,
class S>
friend V &_vmlimultassign(V &v,
const M &m)
881 template <
class VS,
class M,
class S>
friend VS &_vsmlimultassign(VS &v,
const M &m)
900 explicit INLINE
l_rmatrix(
const int &m,
const int &n)
907 explicit INLINE
l_rmatrix(
const int &m1,
const int &n1,
const int &m2,
const int &n2)
953 INLINE
~l_rmatrix()
noexcept {
delete [] dat; }
987 INLINE
operator void*()
noexcept;
1005 int offset1,offset2,mxsize,mysize;
1006 int start1,end1,start2,end2,sxsize,sysize;
1010#ifdef _CXSC_FRIEND_TPL
1012template <
class V,
class MS,
class S>
friend void _vmsconstr(V &v,
const MS &m)
1013#if(CXSC_INDEX_CHECK)
1018 template <
class MS,
class M>
friend MS &_msmassign(MS &ms,
const M &m)
1019#if(CXSC_INDEX_CHECK)
1024 template <
class MS1,
class MS2>
friend MS1 &_msmsassign(MS1 &ms1,
const MS2 &ms)
1025#if(CXSC_INDEX_CHECK)
1030 template <
class M,
class MS2,
class S>
friend M &_mmsassign(M &m,
const MS2 &ms)
noexcept;
1031 template <
class MS,
class S>
friend MS &_mssassign(MS &ms,
const S &r)
noexcept;
1033 template <
class MS>
friend int _mslb(
const MS &ms,
const int &i)
1034#if(CXSC_INDEX_CHECK)
1039 template <
class MS>
friend int _msub(
const MS &ms,
const int &i)
1040#if(CXSC_INDEX_CHECK)
1045 template <
class MS,
class E>
friend E _msabs(
const MS &ms)
noexcept;
1047 template <
class MS,
class E>
friend E _msminus(
const MS &ms)
noexcept;
1048 template <
class M,
class MS,
class E>
friend E _mmsplus(
const M &m,
const MS &ms)
1049#if(CXSC_INDEX_CHECK)
1054 template <
class MS1,
class MS2,
class E>
friend E _msmsplus(
const MS1 &m1,
const MS2 &m2)
1055#if(CXSC_INDEX_CHECK)
1060 template <
class M,
class MS>
friend M &_mmsplusassign(M &m1,
const MS &ms)
1061#if(CXSC_INDEX_CHECK)
1066 template <
class MS,
class M>
friend MS &_msmplusassign(MS &ms,
const M &m1)
1067#if(CXSC_INDEX_CHECK)
1072 template <
class MS1,
class MS2>
friend MS1 &_msmsplusassign(MS1 &ms1,
const MS2 &ms2)
1073#if(CXSC_INDEX_CHECK)
1078 template <
class M,
class MS,
class E>
friend E _mmsminus(
const M &m,
const MS &ms)
1079#if(CXSC_INDEX_CHECK)
1084 template <
class MS,
class M,
class E>
friend E _msmminus(
const MS &ms,
const M &m)
1085#if(CXSC_INDEX_CHECK)
1090 template <
class MS1,
class MS2,
class E>
friend E _msmsminus(
const MS1 &ms1,
const MS2 &ms2)
1091#if(CXSC_INDEX_CHECK)
1096 template <
class M,
class MS>
friend M &_mmsminusassign(M &m1,
const MS &ms)
1097#if(CXSC_INDEX_CHECK)
1102 template <
class MS,
class M>
friend MS &_msmminusassign(MS &ms,
const M &m1)
1103#if(CXSC_INDEX_CHECK)
1108 template <
class MS1,
class MS2>
friend MS1 &_msmsminusassign(MS1 &ms1,
const MS2 &ms2)
1109#if(CXSC_INDEX_CHECK)
1114 template <
class M,
class MS,
class E>
friend E _mmslmult(
const M &m1,
const MS &ms)
1115#if(CXSC_INDEX_CHECK)
1120 template <
class MS,
class M,
class E>
friend E _msmlmult(
const MS &ms,
const M &m2)
1121#if(CXSC_INDEX_CHECK)
1126 template <
class M,
class MS,
class S>
friend M &_mmslmultassign(M &m1,
const MS &ms)
1127#if(CXSC_INDEX_CHECK)
1132 template <
class MS1,
class MS2,
class E>
friend E _msmslmult(
const MS1 &ms1,
const MS2 &ms2)
1133#if(CXSC_INDEX_CHECK)
1138 template <
class M,
class MS,
class E>
friend E _mmsconv(
const M &m,
const MS &ms)
1139#if(CXSC_INDEX_CHECK)
1144 template <
class MS1,
class MS2,
class E>
friend E _msmsconv(
const MS1 &m1,
const MS2 &m2)
1145#if(CXSC_INDEX_CHECK)
1151 template <
class MS,
class V,
class E>
friend E _msvlmult(
const MS &ms,
const V &v)
1152#if(CXSC_INDEX_CHECK)
1157 template <
class V,
class MS,
class E>
friend E _vmslmult(
const V &v,
const MS &ms)
1158#if(CXSC_INDEX_CHECK)
1163 template <
class V,
class MS,
class S>
friend V &_vmslmultassign(V &v,
const MS &ms)
1164#if(CXSC_INDEX_CHECK)
1170 template <
class S,
class MS,
class E>
friend E _smsmult(
const S &c,
const MS &ms)
noexcept;
1171 template <
class MS,
class S>
friend MS &_mssmultassign(MS &ms,
const S &c)
noexcept;
1172 template <
class MS,
class S,
class E>
friend E _mssdiv(
const MS &ms,
const S &c)
noexcept;
1173 template <
class MS,
class S>
friend MS &_mssdivassign(MS &ms,
const S &c)
noexcept;
1175 template <
class MS>
friend void *_msvoid(
const MS &ms)
noexcept;
1176 template <
class MS>
friend bool _msnot(
const MS &ms)
noexcept;
1177 template <
class M,
class MS>
friend bool _mmseq(
const M &m1,
const MS &ms)
noexcept;
1178 template <
class M,
class MS>
friend bool _mmsneq(
const M &m1,
const MS &ms)
noexcept;
1179 template <
class M,
class MS>
friend bool _mmsless(
const M &m1,
const MS &ms)
noexcept;
1180 template <
class M,
class MS>
friend bool _mmsleq(
const M &m1,
const MS &ms)
noexcept;
1181 template <
class MS,
class M>
friend bool _msmless(
const MS &ms,
const M &m1)
noexcept;
1182 template <
class MS,
class M>
friend bool _msmleq(
const MS &ms,
const M &m1)
noexcept;
1183 template <
class MS1,
class MS2>
friend bool _msmseq(
const MS1 &ms1,
const MS2 &ms2)
noexcept;
1184 template <
class MS1,
class MS2>
friend bool _msmsneq(
const MS1 &ms1,
const MS2 &ms2)
noexcept;
1185 template <
class MS1,
class MS2>
friend bool _msmsless(
const MS1 &ms1,
const MS2 &ms2)
noexcept;
1186 template <
class MS1,
class MS2>
friend bool _msmsleq(
const MS1 &ms1,
const MS2 &ms2)
noexcept;
1187 template <
class MS>
friend std::ostream &_msout(std::ostream &s,
const MS &r)
noexcept;
1188 template <
class MS>
friend std::istream &_msin(std::istream &s,MS &r)
noexcept;
1192 template <
class M,
class MS,
class E>
friend E _mmslimult(
const M &m1,
const MS &ms)
1193#if(CXSC_INDEX_CHECK)
1198 template <
class MS,
class M,
class E>
friend E _msmlimult(
const MS &ms,
const M &m2)
1199#if(CXSC_INDEX_CHECK)
1205 template <
class MS1,
class MS2,
class E>
friend E _msmslimult(
const MS1 &ms1,
const MS2 &ms2)
1206#if(CXSC_INDEX_CHECK)
1212 template <
class M,
class MS,
class E>
friend E _mmssect(
const M &m,
const MS &ms)
1213#if(CXSC_INDEX_CHECK)
1218 template <
class MS1,
class MS2,
class E>
friend E _msmssect(
const MS1 &m1,
const MS2 &m2)
1219#if(CXSC_INDEX_CHECK)
1227 template <
class MS,
class V,
class E>
friend E _msvlimult(
const MS &ms,
const V &v)
1228#if(CXSC_INDEX_CHECK)
1233 template <
class V,
class MS,
class E>
friend E _vmslimult(
const V &v,
const MS &ms)
1234#if(CXSC_INDEX_CHECK)
1242 template <
class M1,
class MS2>
friend M1 &_mmssetinf(M1 &m1,
const MS2 &ms2)
1243#if(CXSC_INDEX_CHECK)
1248 template <
class M1,
class MS2>
friend M1 &_mmssetsup(M1 &m1,
const MS2 &ms2)
1249#if(CXSC_INDEX_CHECK)
1254 template <
class M1,
class MS2>
friend M1 &_mmsusetinf(M1 &m1,
const MS2 &ms2)
1255#if(CXSC_INDEX_CHECK)
1260 template <
class M1,
class MS2>
friend M1 &_mmsusetsup(M1 &m1,
const MS2 &ms2)
1261#if(CXSC_INDEX_CHECK)
1266 template <
class MS1,
class MS2>
friend MS1 &_msmssetinf(MS1 &ms1,
const MS2 &ms2)
1267#if(CXSC_INDEX_CHECK)
1272 template <
class MS1,
class MS2>
friend MS1 &_msmssetsup(MS1 &ms1,
const MS2 &ms2)
1273#if(CXSC_INDEX_CHECK)
1278 template <
class MS1,
class MS2>
friend MS1 &_msmsusetinf(MS1 &ms1,
const MS2 &ms2)
1279#if(CXSC_INDEX_CHECK)
1284 template <
class MS1,
class MS2>
friend MS1 &_msmsusetsup(MS1 &ms1,
const MS2 &ms2)
1285#if(CXSC_INDEX_CHECK)
1292 template <
class M,
class MS,
class S>
friend M &_mmslimultassign(M &m1,
const MS &ms)
1293#if(CXSC_INDEX_CHECK)
1300 template <
class M,
class MS>
friend M &_mmsconvassign(M &m1,
const MS &ms)
1301#if(CXSC_INDEX_CHECK)
1306 template <
class MS1,
class MS2>
friend MS1 &_msmsconvassign(MS1 &ms1,
const MS2 &ms2)
1307#if(CXSC_INDEX_CHECK)
1313 template <
class M,
class MS>
friend M &_mmssectassign(M &m1,
const MS &ms)
1314#if(CXSC_INDEX_CHECK)
1319 template <
class MS1,
class MS2>
friend MS1 &_msmssectassign(MS1 &ms1,
const MS2 &ms2)
1320#if(CXSC_INDEX_CHECK)
1332 template <
class V,
class MS,
class S>
friend V &_vmslimultassign(V &v,
const MS &ms)
1333#if(CXSC_INDEX_CHECK)
1344 explicit INLINE
l_rmatrix_slice(
l_rmatrix &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) { }
1346 explicit INLINE
l_rmatrix_slice(
l_rmatrix_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) { }
1349 INLINE
l_rmatrix_slice(
const l_rmatrix_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) { }
1355#if(CXSC_INDEX_CHECK)
1363#if(CXSC_INDEX_CHECK)
1370#if(CXSC_INDEX_CHECK)
1379#if(CXSC_INDEX_CHECK)
1386#if(CXSC_INDEX_CHECK)
1393#if(CXSC_INDEX_CHECK)
1400#if(CXSC_INDEX_CHECK)
1409#if(CXSC_INDEX_CHECK)
1416#if(CXSC_INDEX_CHECK)
1423#if(CXSC_INDEX_CHECK)
1430#if(CXSC_INDEX_CHECK)
1439#if(CXSC_INDEX_CHECK)
1446#if(CXSC_INDEX_CHECK)
1453#if(CXSC_INDEX_CHECK)
1460#if(CXSC_INDEX_CHECK)
1467#if(CXSC_INDEX_CHECK)
1474#if(CXSC_INDEX_CHECK)
1481#if(CXSC_INDEX_CHECK)
1488#if(CXSC_INDEX_CHECK)
1495#if(CXSC_INDEX_CHECK)
1502#if(CXSC_INDEX_CHECK)
1509#if(CXSC_INDEX_CHECK)
1516#if(CXSC_INDEX_CHECK)
1523#if(CXSC_INDEX_CHECK)
1530#if(CXSC_INDEX_CHECK)
1537#if(CXSC_INDEX_CHECK)
1544#if(CXSC_INDEX_CHECK)
1551#if(CXSC_INDEX_CHECK)
1558#if(CXSC_INDEX_CHECK)
1571 INLINE
operator void*()
noexcept;
1595#if(CXSC_INDEX_CHECK)
1602#if(CXSC_INDEX_CHECK)
1609#if(CXSC_INDEX_CHECK)
1616#if(CXSC_INDEX_CHECK)
1623#if(CXSC_INDEX_CHECK)
1631#if(CXSC_INDEX_CHECK)
1638#if(CXSC_INDEX_CHECK)
1645#if(CXSC_INDEX_CHECK)
1652#if(CXSC_INDEX_CHECK)
1659#if(CXSC_INDEX_CHECK)
1667#if(CXSC_INDEX_CHECK)
1674#if(CXSC_INDEX_CHECK)
1681#if(CXSC_INDEX_CHECK)
1688#if(CXSC_INDEX_CHECK)
1695#if(CXSC_INDEX_CHECK)
1703#if(CXSC_INDEX_CHECK)
1710#if(CXSC_INDEX_CHECK)
1717#if(CXSC_INDEX_CHECK)
1724#if(CXSC_INDEX_CHECK)
1731#if(CXSC_INDEX_CHECK)
1739#if(CXSC_INDEX_CHECK)
1746#if(CXSC_INDEX_CHECK)
1753#if(CXSC_INDEX_CHECK)
1760#if(CXSC_INDEX_CHECK)
1767#if(CXSC_INDEX_CHECK)
1787#if(CXSC_INDEX_CHECK)
1794#if(CXSC_INDEX_CHECK)
1801#if(CXSC_INDEX_CHECK)
1808#if(CXSC_INDEX_CHECK)
1815#if(CXSC_INDEX_CHECK)
1822#if(CXSC_INDEX_CHECK)
1831#if(CXSC_INDEX_CHECK)
1837 INLINE
void Resize(
l_rmatrix &A,
const int &m1,
const int &m2,
const int &n1,
const int &n2)
1838#if(CXSC_INDEX_CHECK)
1907#if(CXSC_INDEX_CHECK)
1914#if(CXSC_INDEX_CHECK)
1921#if(CXSC_INDEX_CHECK)
1928#if(CXSC_INDEX_CHECK)
1935#if(CXSC_INDEX_CHECK)
1942#if(CXSC_INDEX_CHECK)
1950#if(CXSC_INDEX_CHECK)
1957#if(CXSC_INDEX_CHECK)
1967#if(CXSC_INDEX_CHECK)
1974#if(CXSC_INDEX_CHECK)
1981#if(CXSC_INDEX_CHECK)
1989#if(CXSC_INDEX_CHECK)
1996#if(CXSC_INDEX_CHECK)
2011#if(CXSC_INDEX_CHECK)
2018#if(CXSC_INDEX_CHECK)
2025#if(CXSC_INDEX_CHECK)
2032#if(CXSC_INDEX_CHECK)
2039#if(CXSC_INDEX_CHECK)
2046#if(CXSC_INDEX_CHECK)
2058#if(CXSC_INDEX_CHECK)
2065#if(CXSC_INDEX_CHECK)
2072#if(CXSC_INDEX_CHECK)
2079#if(CXSC_INDEX_CHECK)
2086#if(CXSC_INDEX_CHECK)
2093#if(CXSC_INDEX_CHECK)
2101#if(CXSC_INDEX_CHECK)
2108#if(CXSC_INDEX_CHECK)
2115#if(CXSC_INDEX_CHECK)
2122#if(CXSC_INDEX_CHECK)
2129#if(CXSC_INDEX_CHECK)
2136#if(CXSC_INDEX_CHECK)
2146#if(CXSC_INDEX_CHECK)
2153#if(CXSC_INDEX_CHECK)
2160#if(CXSC_INDEX_CHECK)
2167#if(CXSC_INDEX_CHECK)
2174#if(CXSC_INDEX_CHECK)
2181#if(CXSC_INDEX_CHECK)
2188#if(CXSC_INDEX_CHECK)
2195#if(CXSC_INDEX_CHECK)
2202#if(CXSC_INDEX_CHECK)
2209#if(CXSC_INDEX_CHECK)
2217#if(CXSC_INDEX_CHECK)
2224#if(CXSC_INDEX_CHECK)
2231#if(CXSC_INDEX_CHECK)
2238#if(CXSC_INDEX_CHECK)
2245#if(CXSC_INDEX_CHECK)
2252#if(CXSC_INDEX_CHECK)
2259#if(CXSC_INDEX_CHECK)
2266#if(CXSC_INDEX_CHECK)
2273#if(CXSC_INDEX_CHECK)
2280#if(CXSC_INDEX_CHECK)
2288#if(CXSC_INDEX_CHECK)
2295#if(CXSC_INDEX_CHECK)
2302#if(CXSC_INDEX_CHECK)
2309#if(CXSC_INDEX_CHECK)
2316#if(CXSC_INDEX_CHECK)
2323#if(CXSC_INDEX_CHECK)
2330#if(CXSC_INDEX_CHECK)
2337#if(CXSC_INDEX_CHECK)
2344#if(CXSC_INDEX_CHECK)
2351#if(CXSC_INDEX_CHECK)
2405 INLINE
bool operator !(
const l_rmatrix &ms)
noexcept;
2412 INLINE std::ostream &operator <<(std::ostream &s,
const l_rmatrix &r)
noexcept;
2414 INLINE std::ostream &operator <<(std::ostream &s,
const l_rmatrix_slice &r)
noexcept;
2416 INLINE std::istream &operator >>(std::istream &s,
l_rmatrix &r)
noexcept;
2418 INLINE std::istream &operator >>(std::istream &s,
l_rmatrix_slice &r)
noexcept;
2437#ifdef _CXSC_INCL_INL
2438#include "matrix.inl"
2439#include "l_rmatrix.inl"
2442#ifdef _CXSC_LIVECTOR_HPP_INCLUDED
2443# ifdef _CXSC_INCL_INL
2444# include "liveclrmat.inl"
2446# include "liveclrmat.hpp"
2450#ifdef _CXSC_IVECTOR_HPP_INCLUDED
2451# ifdef _CXSC_INCL_INL
2452# include "iveclrmat.inl"
2454# include "iveclrmat.hpp"
2458#ifdef _CXSC_IMATRIX_HPP_INCLUDED
2459# ifdef _CXSC_INCL_INL
2460# include "lrmatimat.inl"
2462# include "lrmatimat.hpp"
The Data Type dotprecision.
The Data Type idotprecision.
The Multiple-Precision Data Type l_imatrix.
The Multiple-Precision Data Type l_ivector.
The Multiple-Precision Data Type l_real.
The Multiple-Precision Data Type l_rmatrix_slice.
l_rmatrix_subv operator[](const int &i) const noexcept
Operator for accessing a single row of the matrix.
l_rmatrix_slice & operator()() noexcept
Operator for accessing the whole matrix.
l_rmatrix_slice(l_rmatrix_slice &a, const int &l1, const int &u1, const int &l2, const int &u2) noexcept
Constructor of class l_rmatrix_slice.
l_rmatrix_slice & operator=(const l_rmatrix &m) noexcept
Implementation of standard assigning operator.
l_rmatrix_slice(l_rmatrix &a, const int &l1, const int &u1, const int &l2, const int &u2) noexcept
Constructor of class l_rmatrix_slice.
l_rmatrix_slice & operator/=(const l_real &c) noexcept
Implementation of division and allocation operation.
l_rmatrix_slice & operator|=(const l_rmatrix &m1) noexcept
Allocates the convex hull of the arguments to the first argument.
l_rmatrix_slice(const l_rmatrix_slice &ms) noexcept
Constructor of class l_rmatrix_slice.
l_rmatrix_slice & operator+=(const l_rmatrix &m1) noexcept
Implementation of addition and allocation operation.
l_rmatrix_slice & operator*=(const l_rmatrix &m) noexcept
Implementation of multiplication and allocation operation.
l_rmatrix_slice & operator-=(const l_rmatrix &m1) noexcept
Implementation of subtraction and allocation operation.
The Multiple-Precision Data Type l_rmatrix_subv.
l_rmatrix_subv & operator*=(const l_real &c) noexcept
Implementation of multiplication and allocation operation.
l_rmatrix_subv & operator=(const l_rmatrix_subv &rv) noexcept
Implementation of standard assigning operator.
l_rmatrix_subv(const l_rmatrix_subv &v) noexcept
Constructor of class l_rmatrix_subv.
l_rmatrix_subv & operator()() noexcept
Operator for accessing the whole vector.
friend l_rmatrix_subv Col(l_rmatrix &m, const int &i) noexcept
Returns one column of the matrix as a vector.
l_real & operator[](const int &i) const noexcept
Operator for accessing the single elements of the vector.
friend l_rmatrix_subv Row(l_rmatrix &m, const int &i) noexcept
Returns one row of the matrix as a vector.
friend int Lb(const l_rmatrix_subv &rv) noexcept
Returns the lower bound of the vector.
l_rmatrix_subv & operator+=(const l_real &c) noexcept
Implementation of addition and allocation operation.
l_rmatrix_subv & operator/=(const l_real &c) noexcept
Implementation of division and allocation operation.
l_rmatrix_subv(l_real *d, const int &l, const int &u, const int &s, const int &st, const int &o) noexcept
Constructor of class l_rmatrix_subv.
l_rmatrix_subv & operator-=(const l_real &c) noexcept
Implementation of subtraction and allocation operation.
friend int Ub(const l_rmatrix_subv &rv) noexcept
Returns the upper bound of the vector.
The Multiple-Precision Data Type l_rmatrix.
l_rmatrix & operator=(const l_real &r) noexcept
Implementation of standard assigning operator.
l_rmatrix_subv operator[](const int &i) const noexcept
Operator for accessing a single row of the matrix.
l_rmatrix & operator()() noexcept
Operator for accessing the whole matrix.
l_rmatrix() noexcept
Constructor of class l_rmatrix.
The Multiple-Precision Data Type l_rvector_slice.
The Multiple-Precision Data Type l_rvector.
l_rvector() noexcept
Constructor of class l_rvector.
The Data Type rmatrix_slice.
The Data Type rmatrix_subv.
The Data Type rvector_slice.
The namespace cxsc, providing all functionality of the class library C-XSC.
cdotprecision & operator+=(cdotprecision &cd, const l_complex &lc) noexcept
Implementation of standard algebraic addition and allocation operation.
int ColLen(const cimatrix &)
Returns the column dimension.
civector operator/(const cimatrix_subv &rv, const cinterval &s) noexcept
Implementation of division operation.
cimatrix transp(const cimatrix &A)
Returns the transposed matrix.
int Ub(const cimatrix &rm, const int &i) noexcept
Returns the upper bound index.
cimatrix & SetLb(cimatrix &m, const int &i, const int &j) noexcept
Sets the lower bound index.
int RowLen(const cimatrix &)
Returns the row dimension.
void DoubleSize(cimatrix &A)
Doubles the size of the matrix.
cimatrix Id(const cimatrix &A)
Returns the Identity matrix.
cimatrix & operator*=(cimatrix &m, const cinterval &c) noexcept
Implementation of multiplication and allocation operation.
ivector abs(const cimatrix_subv &mv) noexcept
Returns the absolute value of the matrix.
civector operator*(const cimatrix_subv &rv, const cinterval &s) noexcept
Implementation of multiplication operation.
void Resize(cimatrix &A) noexcept
Resizes the matrix.
l_rmatrix _l_rmatrix(const l_rmatrix &rm) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
cimatrix & SetUb(cimatrix &m, const int &i, const int &j) noexcept
Sets the upper bound index.
int Lb(const cimatrix &rm, const int &i) noexcept
Returns the lower bound index.
cimatrix & operator/=(cimatrix &m, const cinterval &c) noexcept
Implementation of division and allocation operation.