C-XSC - A C++ Class Library for Extended Scientific Computing
2.5.4
|
26 #ifndef _CXSC_CIMATRIX_HPP_INCLUDED
27 #define _CXSC_CIMATRIX_HPP_INCLUDED
29 #include "xscclass.hpp"
31 #include "civector.hpp"
34 #include "imatrix.hpp"
35 #include "cmatrix.hpp"
52 class scimatrix_slice;
76 int size,start,offset;
104 #if(CXSC_INDEX_CHECK)
111 #ifdef _CXSC_FRIEND_TPL
113 template <
class MV1,
class MV2>
friend MV1 &_mvmvassign(MV1 &v,
const MV2 &rv)
114 #if(CXSC_INDEX_CHECK)
119 template <
class MV,
class S>
friend MV &_mvsassign(MV &v,
const S &r) noexcept;
120 template <
class MV,
class V>
friend MV &_mvvassign(MV &v,
const V &rv)
121 #if(CXSC_INDEX_CHECK)
126 template <
class V,
class MV2,
class S>
friend V &_vmvassign(V &v,
const MV2 &rv) noexcept;
127 template <
class MV,
class V>
friend MV &_mvvsetinf(MV &v,
const V &rv)
128 #if(CXSC_INDEX_CHECK)
133 template <
class MV,
class V>
friend MV &_mvvsetsup(MV &v,
const V &rv)
134 #if(CXSC_INDEX_CHECK)
139 template <
class MV,
class V>
friend MV &_mvvusetinf(MV &v,
const V &rv)
140 #if(CXSC_INDEX_CHECK)
145 template <
class MV,
class V>
friend MV &_mvvusetsup(MV &v,
const V &rv)
146 #if(CXSC_INDEX_CHECK)
151 template <
class MV,
class V>
friend MV &_mvvsetre(MV &v,
const V &rv)
152 #if(CXSC_INDEX_CHECK)
157 template <
class MV,
class V>
friend MV &_mvvsetim(MV &v,
const V &rv)
158 #if(CXSC_INDEX_CHECK)
163 template <
class MV,
class V>
friend V _mvabs(
const MV &mv) noexcept;
164 template <
class MV,
class V>
friend V _mvim(
const MV &mv) noexcept;
165 template <
class MV,
class V>
friend V _mvre(
const MV &mv) noexcept;
166 template <
class MV,
class V>
friend V _mvdiam(
const MV &mv) noexcept;
167 template <
class MV,
class V>
friend V _mvmid(
const MV &mv) noexcept;
168 template <
class MV,
class V>
friend V _mvinf(
const MV &mv) noexcept;
169 template <
class MV,
class V>
friend V _mvsup(
const MV &mv) noexcept;
171 template <
class MV,
class S>
friend MV &_mvssetinf(MV &mv,
const S &s) noexcept;
172 template <
class MV,
class S>
friend MV &_mvssetsup(MV &mv,
const S &s) noexcept;
173 template <
class MV,
class S>
friend MV &_mvsusetinf(MV &mv,
const S &s) noexcept;
174 template <
class MV,
class S>
friend MV &_mvsusetsup(MV &mv,
const S &s) noexcept;
175 template <
class MV,
class S>
friend MV &_mvssetim(MV &mv,
const S &s) noexcept;
176 template <
class MV,
class S>
friend MV &_mvssetre(MV &mv,
const S &s) noexcept;
177 template <
class DP,
class V,
class SV>
friend void _vmvaccu(DP &dp,
const V & rv1,
const SV &rv2)
178 #if(CXSC_INDEX_CHECK)
183 template <
class DP,
class MV1,
class MV2>
friend void _mvmvaccu(DP &dp,
const MV1 & rv1,
const MV2 &rv2)
184 #if(CXSC_INDEX_CHECK)
189 template <
class MV1,
class MV2,
class S>
friend S _mvmvcimult(
const MV1 & rv1,
const MV2 &rv2)
190 #if(CXSC_INDEX_CHECK)
195 template <
class V,
class MV,
class S>
friend S _vmvcimult(
const V &rv1,
const MV &rv2)
196 #if(CXSC_INDEX_CHECK)
201 template <
class MV,
class S,
class E>
friend E _mvsmult(
const MV &rv,
const S &s) noexcept;
202 template <
class MV1,
class MV2,
class E>
friend E _mvmvplus(
const MV1 &rv1,
const MV2 &rv2)
203 #if(CXSC_INDEX_CHECK)
208 template <
class MV1,
class MV2,
class E>
friend E _mvmvminus(
const MV1 &rv1,
const MV2 &rv2)
209 #if(CXSC_INDEX_CHECK)
214 template <
class MV,
class V,
class E>
friend E _mvvplus(
const MV &rv1,
const V &rv2)
215 #if(CXSC_INDEX_CHECK)
220 template <
class MV,
class V,
class E>
friend E _mvvminus(
const MV &rv1,
const V &rv2)
221 #if(CXSC_INDEX_CHECK)
226 template <
class V,
class MV,
class E>
friend E _vmvminus(
const V &rv1,
const MV &rv2)
227 #if(CXSC_INDEX_CHECK)
232 template <
class MV,
class S,
class E>
friend E _mvsdiv(
const MV &rv,
const S &s) noexcept;
233 template <
class MV,
class S>
friend MV &_mvsmultassign(MV &v,
const S &r) noexcept;
234 template <
class MV,
class S>
friend MV &_mvsplusassign(MV &v,
const S &r) noexcept;
235 template <
class MV,
class S>
friend MV &_mvsminusassign(MV &v,
const S &r) noexcept;
236 template <
class MV,
class S>
friend MV &_mvsdivassign(MV &v,
const S &r) noexcept;
237 template <
class MV,
class V>
friend MV &_mvvplusassign(MV &v,
const V &rv)
238 #if(CXSC_INDEX_CHECK)
243 template <
class V,
class MV>
friend V &_vmvplusassign(V &rv,
const MV &v)
244 #if(CXSC_INDEX_CHECK)
249 template <
class MV,
class V>
friend MV &_mvvminusassign(MV &v,
const V &rv)
250 #if(CXSC_INDEX_CHECK)
255 template <
class V,
class MV>
friend V &_vmvminusassign(V &rv,
const MV &v)
256 #if(CXSC_INDEX_CHECK)
261 template <
class MV1,
class MV2,
class E>
friend E _mvmvconv(
const MV1 &rv1,
const MV2 &rv2)
262 #if(CXSC_INDEX_CHECK)
267 template <
class MV,
class V,
class E>
friend E _mvvconv(
const MV &rv1,
const V &rv2)
268 #if(CXSC_INDEX_CHECK)
273 template <
class MV,
class V>
friend MV &_mvvconvassign(MV &v,
const V &rv)
274 #if(CXSC_INDEX_CHECK)
279 template <
class MV1,
class MV2,
class E>
friend E _mvmvsect(
const MV1 &rv1,
const MV2 &rv2)
280 #if(CXSC_INDEX_CHECK)
285 template <
class MV,
class V,
class E>
friend E _mvvsect(
const MV &rv1,
const V &rv2)
286 #if(CXSC_INDEX_CHECK)
291 template <
class MV,
class V>
friend MV &_mvvsectassign(MV &v,
const V &rv)
292 #if(CXSC_INDEX_CHECK)
297 template <
class V,
class MV>
friend V &_vmvsectassign(V &rv,
const MV &v)
298 #if(CXSC_INDEX_CHECK)
315 explicit INLINE
cimatrix_subv (
cinterval *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) { }
356 #if(CXSC_INDEX_CHECK)
363 #if(CXSC_INDEX_CHECK)
370 #if(CXSC_INDEX_CHECK)
377 #if(CXSC_INDEX_CHECK)
387 #if(CXSC_INDEX_CHECK)
394 #if(CXSC_INDEX_CHECK)
401 #if(CXSC_INDEX_CHECK)
408 #if(CXSC_INDEX_CHECK)
421 #if(CXSC_INDEX_CHECK)
428 #if(CXSC_INDEX_CHECK)
435 #if(CXSC_INDEX_CHECK)
442 #if(CXSC_INDEX_CHECK)
455 #if(CXSC_INDEX_CHECK)
462 #if(CXSC_INDEX_CHECK)
469 #if(CXSC_INDEX_CHECK)
476 #if(CXSC_INDEX_CHECK)
493 #if(CXSC_INDEX_CHECK)
501 #if(CXSC_INDEX_CHECK)
511 #if(CXSC_INDEX_CHECK)
518 #if(CXSC_INDEX_CHECK)
559 #if(CXSC_INDEX_CHECK)
566 #if(CXSC_INDEX_CHECK)
573 #if(CXSC_INDEX_CHECK)
580 #if(CXSC_INDEX_CHECK)
587 #if(CXSC_INDEX_CHECK)
594 #if(CXSC_INDEX_CHECK)
601 #if(CXSC_INDEX_CHECK)
608 #if(CXSC_INDEX_CHECK)
642 #if(CXSC_INDEX_CHECK)
649 #if(CXSC_INDEX_CHECK)
656 #if(CXSC_INDEX_CHECK)
663 #if(CXSC_INDEX_CHECK)
670 #if(CXSC_INDEX_CHECK)
677 #if(CXSC_INDEX_CHECK)
684 #if(CXSC_INDEX_CHECK)
691 #if(CXSC_INDEX_CHECK)
727 #if(CXSC_INDEX_CHECK)
734 #if(CXSC_INDEX_CHECK)
741 #if(CXSC_INDEX_CHECK)
748 #if(CXSC_INDEX_CHECK)
755 #if(CXSC_INDEX_CHECK)
762 #if(CXSC_INDEX_CHECK)
769 #if(CXSC_INDEX_CHECK)
776 #if(CXSC_INDEX_CHECK)
816 #if(CXSC_INDEX_CHECK)
823 #if(CXSC_INDEX_CHECK)
830 #if(CXSC_INDEX_CHECK)
837 #if(CXSC_INDEX_CHECK)
844 #if(CXSC_INDEX_CHECK)
851 #if(CXSC_INDEX_CHECK)
858 #if(CXSC_INDEX_CHECK)
865 #if(CXSC_INDEX_CHECK)
878 #if(CXSC_INDEX_CHECK)
885 #if(CXSC_INDEX_CHECK)
913 int lb1,ub1,lb2,ub2,xsize,ysize;
917 #ifdef _CXSC_FRIEND_TPL
919 template <
class S,
class M>
friend void _smconstr(S &s,
const M &m)
920 #if(CXSC_INDEX_CHECK)
925 template <
class V,
class M,
class S>
friend void _vmconstr(V &v,
const M &m)
926 #if(CXSC_INDEX_CHECK)
931 template <
class M1,
class M2,
class S>
friend M1 &_mmassign(M1 &m1,
const M2 &m,S ms) noexcept;
932 template <
class M,
class MS2,
class S>
friend M &_mmsassign(M &m,
const MS2 &ms) noexcept;
933 template <
class MS,
class M>
friend MS &_msmassign(MS &ms,
const M &m)
934 #if(CXSC_INDEX_CHECK)
939 template <
class M,
class S>
friend M &_msassign(M &m,
const S &r) noexcept;
940 template <
class V,
class M,
class S>
friend V &_vmassign(V &v,
const M &m)
941 #if(CXSC_INDEX_CHECK)
946 template <
class M,
class V,
class S>
friend M &_mvassign(M &m,
const V &v) noexcept;
947 template <
class M>
friend int _mlb(
const M &m,
const int &i)
948 #if(CXSC_INDEX_CHECK)
953 template <
class M>
friend int _mub(
const M &m,
const int &i)
954 #if(CXSC_INDEX_CHECK)
959 template <
class M>
friend M &_msetlb(M &m,
const int &i,
const int &j)
960 #if(CXSC_INDEX_CHECK)
965 template <
class M>
friend M &_msetub(M &m,
const int &i,
const int &j)
966 #if(CXSC_INDEX_CHECK)
971 template <
class M>
friend void _mresize(M &A) noexcept;
972 template <
class M,
class S>
friend void _mresize(M &A,
const int &m,
const int &n)
973 #if(CXSC_INDEX_CHECK)
978 template <
class M,
class S>
friend void _mresize(M &A,
const int &m1,
const int &m2,
const int &n1,
const int &n2)
979 #if(CXSC_INDEX_CHECK)
984 template <
class M,
class E>
friend E _mabs(
const M &m) noexcept;
985 template <
class M,
class E>
friend E _mdiam(
const M &m) noexcept;
986 template <
class M,
class E>
friend E _mmid(
const M &m) noexcept;
987 template <
class M,
class E>
friend E _mre(
const M &m) noexcept;
988 template <
class M,
class E>
friend E _mim(
const M &m) noexcept;
993 template <
class M1,
class M2>
friend M1 &_mmsetre(M1 &m1,
const M2 &m2)
994 #if(CXSC_INDEX_CHECK)
999 template <
class M1,
class M2>
friend M1 &_mmsetim(M1 &m1,
const M2 &m2)
1000 #if(CXSC_INDEX_CHECK)
1005 template <
class M1,
class MS2>
friend M1 &_mmssetre(M1 &m1,
const MS2 &ms2)
1006 #if(CXSC_INDEX_CHECK)
1011 template <
class M1,
class MS2>
friend M1 &_mmssetim(M1 &m1,
const MS2 &ms2)
1012 #if(CXSC_INDEX_CHECK)
1017 template <
class M,
class E>
friend E _minf(
const M &m) noexcept;
1018 template <
class M,
class E>
friend E _msup(
const M &m) noexcept;
1019 template <
class M1,
class M2>
friend M1 &_mmsetinf(M1 &m1,
const M2 &m2)
1020 #if(CXSC_INDEX_CHECK)
1025 template <
class M1,
class M2>
friend M1 &_mmsetsup(M1 &m1,
const M2 &m2)
1026 #if(CXSC_INDEX_CHECK)
1031 template <
class M1,
class MS2>
friend M1 &_mmssetinf(M1 &m1,
const MS2 &ms2)
1032 #if(CXSC_INDEX_CHECK)
1037 template <
class M1,
class MS2>
friend M1 &_mmssetsup(M1 &m1,
const MS2 &ms2)
1038 #if(CXSC_INDEX_CHECK)
1043 template <
class M1,
class M2>
friend M1 &_mmusetinf(M1 &m1,
const M2 &m2)
1044 #if(CXSC_INDEX_CHECK)
1049 template <
class M1,
class M2>
friend M1 &_mmusetsup(M1 &m1,
const M2 &m2)
1050 #if(CXSC_INDEX_CHECK)
1055 template <
class M1,
class MS2>
friend M1 &_mmsusetinf(M1 &m1,
const MS2 &ms2)
1056 #if(CXSC_INDEX_CHECK)
1061 template <
class M1,
class MS2>
friend M1 &_mmsusetsup(M1 &m1,
const MS2 &ms2)
1062 #if(CXSC_INDEX_CHECK)
1068 template <
class M1,
class M2,
class E>
friend E _mmplus(
const M1 &m1,
const M2 &m2)
1069 #if(CXSC_INDEX_CHECK)
1074 template <
class M,
class MS,
class E>
friend E _mmsplus(
const M &m,
const MS &ms)
1075 #if(CXSC_INDEX_CHECK)
1080 template <
class M>
friend M _mminus(
const M &m) noexcept;
1081 template <
class MS,
class E>
friend E _msminus(
const MS &ms) noexcept;
1082 template <
class M1,
class M2,
class E>
friend E _mmminus(
const M1 &m1,
const M2 &m2)
1083 #if(CXSC_INDEX_CHECK)
1088 template <
class M1,
class M2>
friend M1 &_mmplusassign(M1 &m1,
const M2 &m2)
1089 #if(CXSC_INDEX_CHECK)
1094 template <
class M,
class MS>
friend M &_mmsplusassign(M &m1,
const MS &ms)
1095 #if(CXSC_INDEX_CHECK)
1100 template <
class MS,
class M>
friend MS &_msmplusassign(MS &ms,
const M &m1)
1101 #if(CXSC_INDEX_CHECK)
1106 template <
class MS1,
class MS2,
class E>
friend E _msmsplus(
const MS1 &m1,
const MS2 &m2)
1107 #if(CXSC_INDEX_CHECK)
1112 template <
class M,
class MS,
class E>
friend E _mmsminus(
const M &m,
const MS &ms)
1113 #if(CXSC_INDEX_CHECK)
1118 template <
class MS,
class M,
class E>
friend E _msmminus(
const MS &ms,
const M &m)
1119 #if(CXSC_INDEX_CHECK)
1124 template <
class MS1,
class MS2,
class E>
friend E _msmsminus(
const MS1 &ms1,
const MS2 &ms2)
1125 #if(CXSC_INDEX_CHECK)
1130 template <
class M1,
class M2>
friend M1 &_mmminusassign(M1 &m1,
const M2 &m2)
1131 #if(CXSC_INDEX_CHECK)
1136 template <
class M,
class MS>
friend M &_mmsminusassign(M &m1,
const MS &ms)
1137 #if(CXSC_INDEX_CHECK)
1142 template <
class MS,
class M>
friend MS &_msmminusassign(MS &ms,
const M &m1)
1143 #if(CXSC_INDEX_CHECK)
1148 template <
class M1,
class M2,
class E>
friend E _mmcimult(
const M1 &m1,
const M2 &m2)
1149 #if(CXSC_INDEX_CHECK)
1154 template <
class M1,
class M2,
class S>
friend M1 &_mmcimultassign(M1 &m1,
const M2 &m2)
1155 #if(CXSC_INDEX_CHECK)
1160 template <
class M,
class MS,
class E>
friend E _mmscimult(
const M &m1,
const MS &ms)
1161 #if(CXSC_INDEX_CHECK)
1166 template <
class MS,
class M,
class E>
friend E _msmcimult(
const MS &ms,
const M &m2)
1167 #if(CXSC_INDEX_CHECK)
1172 template <
class M,
class MS,
class S>
friend M &_mmscimultassign(M &m1,
const MS &ms)
1173 #if(CXSC_INDEX_CHECK)
1178 template <
class MS1,
class MS2,
class E>
friend E _msmscimult(
const MS1 &ms1,
const MS2 &ms2)
1179 #if(CXSC_INDEX_CHECK)
1184 template <
class M1,
class M2,
class E>
friend E _mmconv(
const M1 &m1,
const M2 &m2)
1185 #if(CXSC_INDEX_CHECK)
1190 template <
class M,
class MS,
class E>
friend E _mmsconv(
const M &m,
const MS &ms)
1191 #if(CXSC_INDEX_CHECK)
1196 template <
class M1,
class M2>
friend M1 &_mmconvassign(M1 &m1,
const M2 &m2)
1197 #if(CXSC_INDEX_CHECK)
1202 template <
class M,
class MS>
friend M &_mmsconvassign(M &m1,
const MS &ms)
1203 #if(CXSC_INDEX_CHECK)
1208 template <
class MS,
class M>
friend MS &_msmconvassign(MS &ms,
const M &m1)
1209 #if(CXSC_INDEX_CHECK)
1214 template <
class MS1,
class MS2,
class E>
friend E _msmsconv(
const MS1 &m1,
const MS2 &m2)
1215 #if(CXSC_INDEX_CHECK)
1220 template <
class M1,
class M2,
class E>
friend E _mmsect(
const M1 &m1,
const M2 &m2)
1221 #if(CXSC_INDEX_CHECK)
1226 template <
class M,
class MS,
class E>
friend E _mmssect(
const M &m,
const MS &ms)
1227 #if(CXSC_INDEX_CHECK)
1232 template <
class M1,
class M2>
friend M1 &_mmsectassign(M1 &m1,
const M2 &m2)
1233 #if(CXSC_INDEX_CHECK)
1238 template <
class M,
class MS>
friend M &_mmssectassign(M &m1,
const MS &ms)
1239 #if(CXSC_INDEX_CHECK)
1244 template <
class MS,
class M>
friend MS &_msmsectassign(MS &ms,
const M &m1)
1245 #if(CXSC_INDEX_CHECK)
1250 template <
class MS1,
class MS2,
class E>
friend E _msmssect(
const MS1 &m1,
const MS2 &m2)
1251 #if(CXSC_INDEX_CHECK)
1257 template <
class S,
class M,
class E>
friend E _smmult(
const S &c,
const M &m) noexcept;
1258 template <
class M,
class S>
friend M &_msmultassign(M &m,
const S &c) noexcept;
1259 template <
class S,
class MS,
class E>
friend E _smsmult(
const S &c,
const MS &ms) noexcept;
1260 template <
class M,
class S,
class E>
friend E _msdiv(
const M &m,
const S &c) noexcept;
1261 template <
class M,
class S>
friend M &_msdivassign(M &m,
const S &c) noexcept;
1262 template <
class MS,
class S,
class E>
friend E _mssdiv(
const MS &ms,
const S &c) noexcept;
1264 template <
class M,
class V,
class E>
friend E _mvcimult(
const M &m,
const V &v)
1265 #if(CXSC_INDEX_CHECK)
1270 template <
class V,
class M,
class E>
friend E _vmcimult(
const V &v,
const M &m)
1271 #if(CXSC_INDEX_CHECK)
1276 template <
class V,
class M,
class S>
friend V &_vmcimultassign(V &v,
const M &m)
1277 #if(CXSC_INDEX_CHECK)
1282 template <
class VS,
class M,
class S>
friend VS &_vsmcimultassign(VS &v,
const M &m)
1283 #if(CXSC_INDEX_CHECK)
1289 template <
class M>
friend void *_mvoid(
const M &m) noexcept;
1290 template <
class M>
friend bool _mnot(
const M &m) noexcept;
1291 template <
class MS>
friend void *_msvoid(
const MS &ms) noexcept;
1292 template <
class MS>
friend bool _msnot(
const MS &ms) noexcept;
1293 template <
class M1,
class M2>
friend bool _mmeq(
const M1 &m1,
const M2 &m2) noexcept;
1294 template <
class M1,
class M2>
friend bool _mmneq(
const M1 &m1,
const M2 &m2) noexcept;
1295 template <
class M1,
class M2>
friend bool _mmless(
const M1 &m1,
const M2 &m2) noexcept;
1296 template <
class M1,
class M2>
friend bool _mmleq(
const M1 &m1,
const M2 &m2) noexcept;
1297 template <
class M,
class MS>
friend bool _mmseq(
const M &m1,
const MS &ms) noexcept;
1298 template <
class M,
class MS>
friend bool _mmsneq(
const M &m1,
const MS &ms) noexcept;
1299 template <
class M,
class MS>
friend bool _mmsless(
const M &m1,
const MS &ms) noexcept;
1300 template <
class M,
class MS>
friend bool _mmsleq(
const M &m1,
const MS &ms) noexcept;
1301 template <
class MS,
class M>
friend bool _msmless(
const MS &ms,
const M &m1) noexcept;
1302 template <
class MS,
class M>
friend bool _msmleq(
const MS &ms,
const M &m1) noexcept;
1303 template <
class M>
friend std::ostream &_mout(std::ostream &s,
const M &r) noexcept;
1304 template <
class M>
friend std::istream &_min(std::istream &s,M &r) noexcept;
1313 template <
class MS,
class V,
class E>
friend E _msvcimult(
const MS &ms,
const V &v)
1314 #if(CXSC_INDEX_CHECK)
1319 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
1320 #if(CXSC_INDEX_CHECK)
1370 explicit INLINE
cimatrix(
const int &m,
const int &n)
1371 #if(CXSC_INDEX_CHECK)
1376 explicit INLINE
cimatrix(
const int &m1,
const int &n1,
const int &m2,
const int &n2)
1378 #if(CXSC_INDEX_CHECK)
1495 INLINE ~
cimatrix() noexcept {
delete [] dat; }
1595 #if(CXSC_INDEX_CHECK)
1602 #if(CXSC_INDEX_CHECK)
1609 #if(CXSC_INDEX_CHECK)
1616 #if(CXSC_INDEX_CHECK)
1626 #if(CXSC_INDEX_CHECK)
1633 #if(CXSC_INDEX_CHECK)
1638 INLINE
operator void*() noexcept;
1655 int offset1,offset2,mxsize,mysize;
1656 int start1,end1,start2,end2,sxsize,sysize;
1660 #ifdef _CXSC_FRIEND_TPL
1662 template <
class V,
class MS,
class S>
friend void _vmsconstr(V &v,
const MS &m)
1663 #if(CXSC_INDEX_CHECK)
1668 template <
class MS,
class M>
friend MS &_msmassign(MS &ms,
const M &m)
1669 #if(CXSC_INDEX_CHECK)
1674 template <
class MS1,
class MS2>
friend MS1 &_msmsassign(MS1 &ms1,
const MS2 &ms)
1675 #if(CXSC_INDEX_CHECK)
1680 template <
class M,
class MS2,
class S>
friend M &_mmsassign(M &m,
const MS2 &ms) noexcept;
1681 template <
class MS,
class S>
friend MS &_mssassign(MS &ms,
const S &r) noexcept;
1682 template <
class MS>
friend int _mslb(
const MS &ms,
const int &i)
1683 #if(CXSC_INDEX_CHECK)
1688 template <
class MS>
friend int _msub(
const MS &ms,
const int &i)
1689 #if(CXSC_INDEX_CHECK)
1694 template <
class MS,
class E>
friend E _msabs(
const MS &ms) noexcept;
1695 template <
class MS,
class E>
friend E _msinf(
const MS &ms) noexcept;
1696 template <
class MS,
class E>
friend E _mssup(
const MS &ms) noexcept;
1697 template <
class MS,
class E>
friend E _msdiam(
const MS &ms) noexcept;
1698 template <
class MS,
class E>
friend E _msmid(
const MS &ms) noexcept;
1699 template <
class MS,
class E>
friend E _msre(
const MS &ms) noexcept;
1700 template <
class MS,
class E>
friend E _msim(
const MS &ms) noexcept;
1705 template <
class MS1,
class M2>
friend MS1 &_msmsetre(MS1 &ms1,
const M2 &m2)
1706 #if(CXSC_INDEX_CHECK)
1711 template <
class MS1,
class M2>
friend MS1 &_msmsetim(MS1 &ms1,
const M2 &m2)
1712 #if(CXSC_INDEX_CHECK)
1717 template <
class MS1,
class MS2>
friend MS1 &_msmssetre(MS1 &ms1,
const MS2 &ms2)
1718 #if(CXSC_INDEX_CHECK)
1723 template <
class MS1,
class MS2>
friend MS1 &_msmssetim(MS1 &ms1,
const MS2 &ms2)
1724 #if(CXSC_INDEX_CHECK)
1729 template <
class MS1,
class M2>
friend MS1 &_msmsetinf(MS1 &ms1,
const M2 &m2)
1730 #if(CXSC_INDEX_CHECK)
1735 template <
class MS1,
class M2>
friend MS1 &_msmsetsup(MS1 &ms1,
const M2 &m2)
1736 #if(CXSC_INDEX_CHECK)
1741 template <
class MS1,
class MS2>
friend MS1 &_msmssetinf(MS1 &ms1,
const MS2 &ms2)
1742 #if(CXSC_INDEX_CHECK)
1747 template <
class MS1,
class MS2>
friend MS1 &_msmssetsup(MS1 &ms1,
const MS2 &ms2)
1748 #if(CXSC_INDEX_CHECK)
1753 template <
class MS1,
class M2>
friend MS1 &_msmusetinf(MS1 &ms1,
const M2 &m2)
1754 #if(CXSC_INDEX_CHECK)
1759 template <
class MS1,
class M2>
friend MS1 &_msmusetsup(MS1 &ms1,
const M2 &m2)
1760 #if(CXSC_INDEX_CHECK)
1765 template <
class MS1,
class MS2>
friend MS1 &_msmsusetinf(MS1 &ms1,
const MS2 &ms2)
1766 #if(CXSC_INDEX_CHECK)
1771 template <
class MS1,
class MS2>
friend MS1 &_msmsusetsup(MS1 &ms1,
const MS2 &ms2)
1772 #if(CXSC_INDEX_CHECK)
1778 template <
class MS,
class E>
friend E _msminus(
const MS &ms) noexcept;
1779 template <
class M,
class MS,
class E>
friend E _mmsplus(
const M &m,
const MS &ms)
1780 #if(CXSC_INDEX_CHECK)
1785 template <
class MS1,
class MS2,
class E>
friend E _msmsplus(
const MS1 &m1,
const MS2 &m2)
1786 #if(CXSC_INDEX_CHECK)
1791 template <
class M,
class MS>
friend M &_mmsplusassign(M &m1,
const MS &ms)
1792 #if(CXSC_INDEX_CHECK)
1797 template <
class MS,
class M>
friend MS &_msmplusassign(MS &ms,
const M &m1)
1798 #if(CXSC_INDEX_CHECK)
1803 template <
class MS1,
class MS2>
friend MS1 &_msmsplusassign(MS1 &ms1,
const MS2 &ms2)
1804 #if(CXSC_INDEX_CHECK)
1809 template <
class M,
class MS,
class E>
friend E _mmsminus(
const M &m,
const MS &ms)
1810 #if(CXSC_INDEX_CHECK)
1815 template <
class MS,
class M,
class E>
friend E _msmminus(
const MS &ms,
const M &m)
1816 #if(CXSC_INDEX_CHECK)
1821 template <
class MS1,
class MS2,
class E>
friend E _msmsminus(
const MS1 &ms1,
const MS2 &ms2)
1822 #if(CXSC_INDEX_CHECK)
1827 template <
class M,
class MS>
friend M &_mmsminusassign(M &m1,
const MS &ms)
1828 #if(CXSC_INDEX_CHECK)
1833 template <
class MS,
class M>
friend MS &_msmminusassign(MS &ms,
const M &m1)
1834 #if(CXSC_INDEX_CHECK)
1839 template <
class MS1,
class MS2>
friend MS1 &_msmsminusassign(MS1 &ms1,
const MS2 &ms2)
1840 #if(CXSC_INDEX_CHECK)
1845 template <
class M,
class MS,
class E>
friend E _mmscimult(
const M &m1,
const MS &ms)
1846 #if(CXSC_INDEX_CHECK)
1851 template <
class MS,
class M,
class E>
friend E _msmcimult(
const MS &ms,
const M &m2)
1852 #if(CXSC_INDEX_CHECK)
1857 template <
class M,
class MS,
class S>
friend M &_mmscimultassign(M &m1,
const MS &ms)
1858 #if(CXSC_INDEX_CHECK)
1863 template <
class MS1,
class MS2,
class E>
friend E _msmscimult(
const MS1 &ms1,
const MS2 &ms2)
1864 #if(CXSC_INDEX_CHECK)
1869 template <
class M,
class MS,
class E>
friend E _mmsconv(
const M &m,
const MS &ms)
1870 #if(CXSC_INDEX_CHECK)
1875 template <
class M,
class MS>
friend M &_mmsconvassign(M &m1,
const MS &ms)
1876 #if(CXSC_INDEX_CHECK)
1881 template <
class MS,
class M>
friend MS &_msmconvassign(MS &ms,
const M &m1)
1882 #if(CXSC_INDEX_CHECK)
1887 template <
class MS1,
class MS2>
friend MS1 &_msmsconvassign(MS1 &ms1,
const MS2 &ms2)
1888 #if(CXSC_INDEX_CHECK)
1893 template <
class MS1,
class MS2,
class E>
friend E _msmsconv(
const MS1 &m1,
const MS2 &m2)
1894 #if(CXSC_INDEX_CHECK)
1899 template <
class M,
class MS,
class E>
friend E _mmssect(
const M &m,
const MS &ms)
1900 #if(CXSC_INDEX_CHECK)
1905 template <
class M,
class MS>
friend M &_mmssectassign(M &m1,
const MS &ms)
1906 #if(CXSC_INDEX_CHECK)
1911 template <
class MS,
class M>
friend MS &_msmsectassign(MS &ms,
const M &m1)
1912 #if(CXSC_INDEX_CHECK)
1917 template <
class MS1,
class MS2>
friend MS1 &_msmssectassign(MS1 &ms1,
const MS2 &ms2)
1918 #if(CXSC_INDEX_CHECK)
1923 template <
class MS1,
class MS2,
class E>
friend E _msmssect(
const MS1 &m1,
const MS2 &m2)
1924 #if(CXSC_INDEX_CHECK)
1930 template <
class MS,
class V,
class E>
friend E _msvcimult(
const MS &ms,
const V &v)
1931 #if(CXSC_INDEX_CHECK)
1936 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
1937 #if(CXSC_INDEX_CHECK)
1942 template <
class V,
class MS,
class S>
friend V &_vmscimultassign(V &v,
const MS &ms)
1943 #if(CXSC_INDEX_CHECK)
1949 template <
class S,
class MS,
class E>
friend E _smsmult(
const S &c,
const MS &ms) noexcept;
1950 template <
class MS,
class S>
friend MS &_mssmultassign(MS &ms,
const S &c) noexcept;
1951 template <
class MS,
class S,
class E>
friend E _mssdiv(
const MS &ms,
const S &c) noexcept;
1952 template <
class MS,
class S>
friend MS &_mssdivassign(MS &ms,
const S &c) noexcept;
1954 template <
class MS>
friend void *_msvoid(
const MS &ms) noexcept;
1955 template <
class MS>
friend bool _msnot(
const MS &ms) noexcept;
1956 template <
class M,
class MS>
friend bool _mmseq(
const M &m1,
const MS &ms) noexcept;
1957 template <
class M,
class MS>
friend bool _mmsneq(
const M &m1,
const MS &ms) noexcept;
1958 template <
class M,
class MS>
friend bool _mmsless(
const M &m1,
const MS &ms) noexcept;
1959 template <
class M,
class MS>
friend bool _mmsleq(
const M &m1,
const MS &ms) noexcept;
1960 template <
class MS,
class M>
friend bool _msmless(
const MS &ms,
const M &m1) noexcept;
1961 template <
class MS,
class M>
friend bool _msmleq(
const MS &ms,
const M &m1) noexcept;
1962 template <
class MS1,
class MS2>
friend bool _msmseq(
const MS1 &ms1,
const MS2 &ms2) noexcept;
1963 template <
class MS1,
class MS2>
friend bool _msmsneq(
const MS1 &ms1,
const MS2 &ms2) noexcept;
1964 template <
class MS1,
class MS2>
friend bool _msmsless(
const MS1 &ms1,
const MS2 &ms2) noexcept;
1965 template <
class MS1,
class MS2>
friend bool _msmsleq(
const MS1 &ms1,
const MS2 &ms2) noexcept;
1966 template <
class MS>
friend std::ostream &_msout(std::ostream &s,
const MS &r) noexcept;
1967 template <
class MS>
friend std::istream &_msin(std::istream &s,MS &r) noexcept;
2003 explicit INLINE
cimatrix_slice(
cimatrix &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) { }
2005 explicit INLINE
cimatrix_slice(
cimatrix_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) { }
2008 INLINE
cimatrix_slice(
const cimatrix_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) { }
2014 #if(CXSC_INDEX_CHECK)
2022 #if(CXSC_INDEX_CHECK)
2029 #if(CXSC_INDEX_CHECK)
2044 #if(CXSC_INDEX_CHECK)
2051 #if(CXSC_INDEX_CHECK)
2058 #if(CXSC_INDEX_CHECK)
2072 #if(CXSC_INDEX_CHECK)
2079 #if(CXSC_INDEX_CHECK)
2088 #if(CXSC_INDEX_CHECK)
2095 #if(CXSC_INDEX_CHECK)
2102 #if(CXSC_INDEX_CHECK)
2117 #if(CXSC_INDEX_CHECK)
2124 #if(CXSC_INDEX_CHECK)
2133 #if(CXSC_INDEX_CHECK)
2140 #if(CXSC_INDEX_CHECK)
2147 #if(CXSC_INDEX_CHECK)
2162 #if(CXSC_INDEX_CHECK)
2169 #if(CXSC_INDEX_CHECK)
2178 #if(CXSC_INDEX_CHECK)
2185 #if(CXSC_INDEX_CHECK)
2192 #if(CXSC_INDEX_CHECK)
2200 #if(CXSC_INDEX_CHECK)
2207 #if(CXSC_INDEX_CHECK)
2215 #if(CXSC_INDEX_CHECK)
2222 #if(CXSC_INDEX_CHECK)
2232 #if(CXSC_INDEX_CHECK)
2239 #if(CXSC_INDEX_CHECK)
2244 INLINE
operator void*() noexcept;
2277 #if(CXSC_INDEX_CHECK)
2284 #if(CXSC_INDEX_CHECK)
2291 #if(CXSC_INDEX_CHECK)
2298 #if(CXSC_INDEX_CHECK)
2305 #if(CXSC_INDEX_CHECK)
2312 #if(CXSC_INDEX_CHECK)
2319 #if(CXSC_INDEX_CHECK)
2326 #if(CXSC_INDEX_CHECK)
2333 #if(CXSC_INDEX_CHECK)
2340 #if(CXSC_INDEX_CHECK)
2377 #if(CXSC_INDEX_CHECK)
2384 #if(CXSC_INDEX_CHECK)
2391 #if(CXSC_INDEX_CHECK)
2398 #if(CXSC_INDEX_CHECK)
2405 #if(CXSC_INDEX_CHECK)
2412 #if(CXSC_INDEX_CHECK)
2419 #if(CXSC_INDEX_CHECK)
2426 #if(CXSC_INDEX_CHECK)
2433 #if(CXSC_INDEX_CHECK)
2440 #if(CXSC_INDEX_CHECK)
2477 #if(CXSC_INDEX_CHECK)
2484 #if(CXSC_INDEX_CHECK)
2491 #if(CXSC_INDEX_CHECK)
2498 #if(CXSC_INDEX_CHECK)
2505 #if(CXSC_INDEX_CHECK)
2512 #if(CXSC_INDEX_CHECK)
2519 #if(CXSC_INDEX_CHECK)
2526 #if(CXSC_INDEX_CHECK)
2533 #if(CXSC_INDEX_CHECK)
2540 #if(CXSC_INDEX_CHECK)
2577 #if(CXSC_INDEX_CHECK)
2584 #if(CXSC_INDEX_CHECK)
2591 #if(CXSC_INDEX_CHECK)
2598 #if(CXSC_INDEX_CHECK)
2605 #if(CXSC_INDEX_CHECK)
2612 #if(CXSC_INDEX_CHECK)
2619 #if(CXSC_INDEX_CHECK)
2626 #if(CXSC_INDEX_CHECK)
2633 #if(CXSC_INDEX_CHECK)
2640 #if(CXSC_INDEX_CHECK)
2693 #if(CXSC_INDEX_CHECK)
2700 #if(CXSC_INDEX_CHECK)
2707 #if(CXSC_INDEX_CHECK)
2714 #if(CXSC_INDEX_CHECK)
2721 #if(CXSC_INDEX_CHECK)
2728 #if(CXSC_INDEX_CHECK)
2752 #if(CXSC_INDEX_CHECK)
2759 #if(CXSC_INDEX_CHECK)
2766 #if(CXSC_INDEX_CHECK)
2773 #if(CXSC_INDEX_CHECK)
2780 #if(CXSC_INDEX_CHECK)
2787 #if(CXSC_INDEX_CHECK)
2795 #if(CXSC_INDEX_CHECK)
2803 #if(CXSC_INDEX_CHECK)
2810 #if(CXSC_INDEX_CHECK)
2817 #if(CXSC_INDEX_CHECK)
2824 #if(CXSC_INDEX_CHECK)
2831 #if(CXSC_INDEX_CHECK)
2839 #if(CXSC_INDEX_CHECK)
2846 #if(CXSC_INDEX_CHECK)
2853 #if(CXSC_INDEX_CHECK)
2860 #if(CXSC_INDEX_CHECK)
2867 #if(CXSC_INDEX_CHECK)
2875 #if(CXSC_INDEX_CHECK)
2882 #if(CXSC_INDEX_CHECK)
2889 #if(CXSC_INDEX_CHECK)
2896 #if(CXSC_INDEX_CHECK)
2903 #if(CXSC_INDEX_CHECK)
2913 #if(CXSC_INDEX_CHECK)
2920 #if(CXSC_INDEX_CHECK)
2927 #if(CXSC_INDEX_CHECK)
2934 #if(CXSC_INDEX_CHECK)
2941 #if(CXSC_INDEX_CHECK)
2948 #if(CXSC_INDEX_CHECK)
2958 #if(CXSC_INDEX_CHECK)
2965 #if(CXSC_INDEX_CHECK)
2972 #if(CXSC_INDEX_CHECK)
2979 #if(CXSC_INDEX_CHECK)
2986 #if(CXSC_INDEX_CHECK)
2993 #if(CXSC_INDEX_CHECK)
3003 #if(CXSC_INDEX_CHECK)
3010 #if(CXSC_INDEX_CHECK)
3017 #if(CXSC_INDEX_CHECK)
3024 #if(CXSC_INDEX_CHECK)
3031 #if(CXSC_INDEX_CHECK)
3038 #if(CXSC_INDEX_CHECK)
3045 #if(CXSC_INDEX_CHECK)
3052 #if(CXSC_INDEX_CHECK)
3072 INLINE
int Lb(
const cimatrix &rm,
const int &i)
3073 #if(CXSC_INDEX_CHECK)
3078 INLINE
int Ub(
const cimatrix &rm,
const int &i)
3080 #if(CXSC_INDEX_CHECK)
3087 #if(CXSC_INDEX_CHECK)
3094 #if(CXSC_INDEX_CHECK)
3101 #if(CXSC_INDEX_CHECK)
3108 #if(CXSC_INDEX_CHECK)
3117 #if(CXSC_INDEX_CHECK)
3122 INLINE
void Resize(
cimatrix &A,
const int &m1,
const int &m2,
const int &n1,
const int &n2)
3124 #if(CXSC_INDEX_CHECK)
3152 #if(CXSC_INDEX_CHECK)
3159 #if(CXSC_INDEX_CHECK)
3166 #if(CXSC_INDEX_CHECK)
3173 #if(CXSC_INDEX_CHECK)
3180 #if(CXSC_INDEX_CHECK)
3187 #if(CXSC_INDEX_CHECK)
3194 #if(CXSC_INDEX_CHECK)
3201 #if(CXSC_INDEX_CHECK)
3208 #if(CXSC_INDEX_CHECK)
3215 #if(CXSC_INDEX_CHECK)
3222 #if(CXSC_INDEX_CHECK)
3229 #if(CXSC_INDEX_CHECK)
3236 #if(CXSC_INDEX_CHECK)
3243 #if(CXSC_INDEX_CHECK)
3250 #if(CXSC_INDEX_CHECK)
3257 #if(CXSC_INDEX_CHECK)
3273 #if(CXSC_INDEX_CHECK)
3280 #if(CXSC_INDEX_CHECK)
3287 #if(CXSC_INDEX_CHECK)
3294 #if(CXSC_INDEX_CHECK)
3301 #if(CXSC_INDEX_CHECK)
3308 #if(CXSC_INDEX_CHECK)
3315 #if(CXSC_INDEX_CHECK)
3322 #if(CXSC_INDEX_CHECK)
3452 #if(CXSC_INDEX_CHECK)
3459 #if(CXSC_INDEX_CHECK)
3466 #if(CXSC_INDEX_CHECK)
3473 #if(CXSC_INDEX_CHECK)
3480 #if(CXSC_INDEX_CHECK)
3487 #if(CXSC_INDEX_CHECK)
3495 #if(CXSC_INDEX_CHECK)
3502 #if(CXSC_INDEX_CHECK)
3512 #if(CXSC_INDEX_CHECK)
3519 #if(CXSC_INDEX_CHECK)
3526 #if(CXSC_INDEX_CHECK)
3534 #if(CXSC_INDEX_CHECK)
3541 #if(CXSC_INDEX_CHECK)
3551 #if(CXSC_INDEX_CHECK)
3558 #if(CXSC_INDEX_CHECK)
3565 #if(CXSC_INDEX_CHECK)
3573 #if(CXSC_INDEX_CHECK)
3580 #if(CXSC_INDEX_CHECK)
3590 #if(CXSC_INDEX_CHECK)
3597 #if(CXSC_INDEX_CHECK)
3604 #if(CXSC_INDEX_CHECK)
3612 #if(CXSC_INDEX_CHECK)
3619 #if(CXSC_INDEX_CHECK)
3634 #if(CXSC_INDEX_CHECK)
3641 #if(CXSC_INDEX_CHECK)
3648 #if(CXSC_INDEX_CHECK)
3655 #if(CXSC_INDEX_CHECK)
3662 #if(CXSC_INDEX_CHECK)
3669 #if(CXSC_INDEX_CHECK)
3681 #if(CXSC_INDEX_CHECK)
3688 #if(CXSC_INDEX_CHECK)
3695 #if(CXSC_INDEX_CHECK)
3702 #if(CXSC_INDEX_CHECK)
3709 #if(CXSC_INDEX_CHECK)
3716 #if(CXSC_INDEX_CHECK)
3724 #if(CXSC_INDEX_CHECK)
3731 #if(CXSC_INDEX_CHECK)
3738 #if(CXSC_INDEX_CHECK)
3745 #if(CXSC_INDEX_CHECK)
3752 #if(CXSC_INDEX_CHECK)
3759 #if(CXSC_INDEX_CHECK)
3768 #if(CXSC_INDEX_CHECK)
3775 #if(CXSC_INDEX_CHECK)
3782 #if(CXSC_INDEX_CHECK)
3789 #if(CXSC_INDEX_CHECK)
3796 #if(CXSC_INDEX_CHECK)
3803 #if(CXSC_INDEX_CHECK)
3811 #if(CXSC_INDEX_CHECK)
3818 #if(CXSC_INDEX_CHECK)
3825 #if(CXSC_INDEX_CHECK)
3832 #if(CXSC_INDEX_CHECK)
3839 #if(CXSC_INDEX_CHECK)
3846 #if(CXSC_INDEX_CHECK)
3855 #if(CXSC_INDEX_CHECK)
3862 #if(CXSC_INDEX_CHECK)
3869 #if(CXSC_INDEX_CHECK)
3876 #if(CXSC_INDEX_CHECK)
3883 #if(CXSC_INDEX_CHECK)
3890 #if(CXSC_INDEX_CHECK)
3897 #if(CXSC_INDEX_CHECK)
3904 #if(CXSC_INDEX_CHECK)
3911 #if(CXSC_INDEX_CHECK)
3918 #if(CXSC_INDEX_CHECK)
3926 #if(CXSC_INDEX_CHECK)
3933 #if(CXSC_INDEX_CHECK)
3940 #if(CXSC_INDEX_CHECK)
3947 #if(CXSC_INDEX_CHECK)
3954 #if(CXSC_INDEX_CHECK)
3961 #if(CXSC_INDEX_CHECK)
3968 #if(CXSC_INDEX_CHECK)
3975 #if(CXSC_INDEX_CHECK)
3982 #if(CXSC_INDEX_CHECK)
3989 #if(CXSC_INDEX_CHECK)
3997 #if(CXSC_INDEX_CHECK)
4004 #if(CXSC_INDEX_CHECK)
4011 #if(CXSC_INDEX_CHECK)
4018 #if(CXSC_INDEX_CHECK)
4025 #if(CXSC_INDEX_CHECK)
4032 #if(CXSC_INDEX_CHECK)
4039 #if(CXSC_INDEX_CHECK)
4046 #if(CXSC_INDEX_CHECK)
4053 #if(CXSC_INDEX_CHECK)
4060 #if(CXSC_INDEX_CHECK)
4068 #if(CXSC_INDEX_CHECK)
4075 #if(CXSC_INDEX_CHECK)
4082 #if(CXSC_INDEX_CHECK)
4089 #if(CXSC_INDEX_CHECK)
4096 #if(CXSC_INDEX_CHECK)
4103 #if(CXSC_INDEX_CHECK)
4110 #if(CXSC_INDEX_CHECK)
4117 #if(CXSC_INDEX_CHECK)
4124 #if(CXSC_INDEX_CHECK)
4131 #if(CXSC_INDEX_CHECK)
4139 #if(CXSC_INDEX_CHECK)
4146 #if(CXSC_INDEX_CHECK)
4153 #if(CXSC_INDEX_CHECK)
4160 #if(CXSC_INDEX_CHECK)
4167 #if(CXSC_INDEX_CHECK)
4174 #if(CXSC_INDEX_CHECK)
4181 #if(CXSC_INDEX_CHECK)
4188 #if(CXSC_INDEX_CHECK)
4195 #if(CXSC_INDEX_CHECK)
4202 #if(CXSC_INDEX_CHECK)
4211 #if(CXSC_INDEX_CHECK)
4218 #if(CXSC_INDEX_CHECK)
4225 #if(CXSC_INDEX_CHECK)
4232 #if(CXSC_INDEX_CHECK)
4239 #if(CXSC_INDEX_CHECK)
4246 #if(CXSC_INDEX_CHECK)
4253 #if(CXSC_INDEX_CHECK)
4260 #if(CXSC_INDEX_CHECK)
4267 #if(CXSC_INDEX_CHECK)
4274 #if(CXSC_INDEX_CHECK)
4282 #if(CXSC_INDEX_CHECK)
4289 #if(CXSC_INDEX_CHECK)
4296 #if(CXSC_INDEX_CHECK)
4303 #if(CXSC_INDEX_CHECK)
4310 #if(CXSC_INDEX_CHECK)
4317 #if(CXSC_INDEX_CHECK)
4324 #if(CXSC_INDEX_CHECK)
4331 #if(CXSC_INDEX_CHECK)
4338 #if(CXSC_INDEX_CHECK)
4345 #if(CXSC_INDEX_CHECK)
4353 #if(CXSC_INDEX_CHECK)
4360 #if(CXSC_INDEX_CHECK)
4367 #if(CXSC_INDEX_CHECK)
4374 #if(CXSC_INDEX_CHECK)
4381 #if(CXSC_INDEX_CHECK)
4388 #if(CXSC_INDEX_CHECK)
4395 #if(CXSC_INDEX_CHECK)
4402 #if(CXSC_INDEX_CHECK)
4409 #if(CXSC_INDEX_CHECK)
4416 #if(CXSC_INDEX_CHECK)
4424 #if(CXSC_INDEX_CHECK)
4431 #if(CXSC_INDEX_CHECK)
4438 #if(CXSC_INDEX_CHECK)
4445 #if(CXSC_INDEX_CHECK)
4452 #if(CXSC_INDEX_CHECK)
4459 #if(CXSC_INDEX_CHECK)
4466 #if(CXSC_INDEX_CHECK)
4473 #if(CXSC_INDEX_CHECK)
4480 #if(CXSC_INDEX_CHECK)
4487 #if(CXSC_INDEX_CHECK)
4495 #if(CXSC_INDEX_CHECK)
4502 #if(CXSC_INDEX_CHECK)
4509 #if(CXSC_INDEX_CHECK)
4516 #if(CXSC_INDEX_CHECK)
4523 #if(CXSC_INDEX_CHECK)
4530 #if(CXSC_INDEX_CHECK)
4537 #if(CXSC_INDEX_CHECK)
4544 #if(CXSC_INDEX_CHECK)
4551 #if(CXSC_INDEX_CHECK)
4558 #if(CXSC_INDEX_CHECK)
4567 #if(CXSC_INDEX_CHECK)
4574 #if(CXSC_INDEX_CHECK)
4581 #if(CXSC_INDEX_CHECK)
4588 #if(CXSC_INDEX_CHECK)
4595 #if(CXSC_INDEX_CHECK)
4602 #if(CXSC_INDEX_CHECK)
4609 #if(CXSC_INDEX_CHECK)
4616 #if(CXSC_INDEX_CHECK)
4623 #if(CXSC_INDEX_CHECK)
4630 #if(CXSC_INDEX_CHECK)
4638 #if(CXSC_INDEX_CHECK)
4645 #if(CXSC_INDEX_CHECK)
4652 #if(CXSC_INDEX_CHECK)
4659 #if(CXSC_INDEX_CHECK)
4666 #if(CXSC_INDEX_CHECK)
4673 #if(CXSC_INDEX_CHECK)
4680 #if(CXSC_INDEX_CHECK)
4687 #if(CXSC_INDEX_CHECK)
4694 #if(CXSC_INDEX_CHECK)
4701 #if(CXSC_INDEX_CHECK)
4709 #if(CXSC_INDEX_CHECK)
4716 #if(CXSC_INDEX_CHECK)
4723 #if(CXSC_INDEX_CHECK)
4730 #if(CXSC_INDEX_CHECK)
4737 #if(CXSC_INDEX_CHECK)
4744 #if(CXSC_INDEX_CHECK)
4751 #if(CXSC_INDEX_CHECK)
4758 #if(CXSC_INDEX_CHECK)
4765 #if(CXSC_INDEX_CHECK)
4772 #if(CXSC_INDEX_CHECK)
4780 #if(CXSC_INDEX_CHECK)
4787 #if(CXSC_INDEX_CHECK)
4794 #if(CXSC_INDEX_CHECK)
4801 #if(CXSC_INDEX_CHECK)
4808 #if(CXSC_INDEX_CHECK)
4815 #if(CXSC_INDEX_CHECK)
4822 #if(CXSC_INDEX_CHECK)
4829 #if(CXSC_INDEX_CHECK)
4836 #if(CXSC_INDEX_CHECK)
4843 #if(CXSC_INDEX_CHECK)
4851 #if(CXSC_INDEX_CHECK)
4858 #if(CXSC_INDEX_CHECK)
4865 #if(CXSC_INDEX_CHECK)
4872 #if(CXSC_INDEX_CHECK)
4879 #if(CXSC_INDEX_CHECK)
4886 #if(CXSC_INDEX_CHECK)
4893 #if(CXSC_INDEX_CHECK)
4900 #if(CXSC_INDEX_CHECK)
4907 #if(CXSC_INDEX_CHECK)
4914 #if(CXSC_INDEX_CHECK)
4923 #if(CXSC_INDEX_CHECK)
4930 #if(CXSC_INDEX_CHECK)
4937 #if(CXSC_INDEX_CHECK)
4944 #if(CXSC_INDEX_CHECK)
4951 #if(CXSC_INDEX_CHECK)
4958 #if(CXSC_INDEX_CHECK)
4965 #if(CXSC_INDEX_CHECK)
4972 #if(CXSC_INDEX_CHECK)
4980 #if(CXSC_INDEX_CHECK)
4987 #if(CXSC_INDEX_CHECK)
4994 #if(CXSC_INDEX_CHECK)
5001 #if(CXSC_INDEX_CHECK)
5008 #if(CXSC_INDEX_CHECK)
5015 #if(CXSC_INDEX_CHECK)
5022 #if(CXSC_INDEX_CHECK)
5029 #if(CXSC_INDEX_CHECK)
5037 #if(CXSC_INDEX_CHECK)
5044 #if(CXSC_INDEX_CHECK)
5051 #if(CXSC_INDEX_CHECK)
5058 #if(CXSC_INDEX_CHECK)
5065 #if(CXSC_INDEX_CHECK)
5072 #if(CXSC_INDEX_CHECK)
5079 #if(CXSC_INDEX_CHECK)
5086 #if(CXSC_INDEX_CHECK)
5094 #if(CXSC_INDEX_CHECK)
5101 #if(CXSC_INDEX_CHECK)
5108 #if(CXSC_INDEX_CHECK)
5115 #if(CXSC_INDEX_CHECK)
5122 #if(CXSC_INDEX_CHECK)
5129 #if(CXSC_INDEX_CHECK)
5136 #if(CXSC_INDEX_CHECK)
5143 #if(CXSC_INDEX_CHECK)
5151 #if(CXSC_INDEX_CHECK)
5158 #if(CXSC_INDEX_CHECK)
5165 #if(CXSC_INDEX_CHECK)
5172 #if(CXSC_INDEX_CHECK)
5179 #if(CXSC_INDEX_CHECK)
5186 #if(CXSC_INDEX_CHECK)
5193 #if(CXSC_INDEX_CHECK)
5200 #if(CXSC_INDEX_CHECK)
5209 #if(CXSC_INDEX_CHECK)
5216 #if(CXSC_INDEX_CHECK)
5223 #if(CXSC_INDEX_CHECK)
5230 #if(CXSC_INDEX_CHECK)
5237 #if(CXSC_INDEX_CHECK)
5244 #if(CXSC_INDEX_CHECK)
5251 #if(CXSC_INDEX_CHECK)
5258 #if(CXSC_INDEX_CHECK)
5268 #if(CXSC_INDEX_CHECK)
5275 #if(CXSC_INDEX_CHECK)
5282 #if(CXSC_INDEX_CHECK)
5289 #if(CXSC_INDEX_CHECK)
5296 #if(CXSC_INDEX_CHECK)
5303 #if(CXSC_INDEX_CHECK)
5310 #if(CXSC_INDEX_CHECK)
5317 #if(CXSC_INDEX_CHECK)
5371 INLINE
bool operator !(
const cimatrix &ms) noexcept;
5378 INLINE std::ostream &operator <<(std::ostream &s,
const cimatrix &r) noexcept;
5380 INLINE std::ostream &operator <<(std::ostream &s,
const cimatrix_slice &r) noexcept;
5382 INLINE std::istream &operator >>(std::istream &s,
cimatrix &r) noexcept;
5384 INLINE std::istream &operator >>(std::istream &s,
cimatrix_slice &r) noexcept;
5406 #ifdef _CXSC_INCL_INL
5407 #include "matrix.inl"
5408 #include "cimatrix.inl"
5412 #ifdef CXSC_USE_BLAS
5413 #define _CXSC_BLAS_CIMATRIX
5414 #include "cxsc_blas.inl"
cimatrix_slice & operator=(const cimatrix &m) noexcept
Implementation of standard assigning operator.
friend rmatrix InfIm(const cimatrix_slice &v) noexcept
Returns the infimum of imaginary part of the matrix.
cimatrix_slice & operator-=(const cinterval &c) noexcept
Implementation of subtraction and allocation operation.
cvector mid(const cimatrix_subv &mv) noexcept
Returns the middle of the matrix.
Helper class for slices of sparse vectors.
The Data Type civector_slice.
cimatrix_subv & operator&=(const scivector &rv)
Implementation of intersection and allocation operation.
friend rmatrix SupRe(const cimatrix &v) noexcept
Returns the supremum of real part of the matrix.
cinterval & operator[](const int &i) const noexcept
Operator for accessing the single elements of the vector (read-only)
A slice of a sparse real interval matrix.
rmatrix CompMat(const cimatrix &A)
Returns Ostrowski's comparison matrix.
The Data Type imatrix_slice.
Represents a row or column vector of a sparse matrix.
cimatrix_slice(const cimatrix_slice &ms) noexcept
Constructor of class cimatrix_slice.
cimatrix_subv & operator|=(const scivector &rv)
Implementation of hull and allocation operation.
friend rmatrix SupIm(const cimatrix_slice &v) noexcept
Returns the supremum of imaginary part of the matrix.
int RowLen(const cimatrix &)
Returns the row dimension.
cimatrix_subv & operator+=(const cinterval &c) noexcept
Implementation of addition and allocation operation.
A slice of a sparse complex matrix.
The Data Type imatrix_subv.
cimatrix & operator|=(const scimatrix &m1)
Implementation of hull and allocation operation.
int Ub(const cimatrix &rm, const int &i) noexcept
Returns the upper bound index.
The Scalar Type interval.
A slice of a sparse complex interval matrix.
cimatrix & operator*=(cimatrix &m, const cinterval &c) noexcept
Implementation of multiplication and allocation operation.
civector operator/(const cimatrix_subv &rv, const cinterval &s) noexcept
Implementation of division operation.
cimatrix_subv & operator/=(const cinterval &c) noexcept
Implementation of division and allocation operation.
cimatrix_subv & operator-=(const cinterval &c) noexcept
Implementation of subtraction and allocation operation.
friend rmatrix SupRe(const cimatrix_slice &v) noexcept
Returns the supremum of real part of the matrix.
civector() noexcept
Constructor of class civector.
cimatrix_slice & operator()() noexcept
Operator for accessing the whole matrix.
Helper class for slices of sparse vectors.
A sparse complex interval matrix.
cimatrix & operator-=(const scimatrix &m1)
Implementation of substraction and allocation operation.
ivector abs(const cimatrix_subv &mv) noexcept
Returns the absolute value of the matrix.
cimatrix & operator/=(cimatrix &m, const cinterval &c) noexcept
Implementation of division and allocation operation.
int ColLen(const cimatrix &)
Returns the column dimension.
friend int VecLen(const cimatrix_subv &rv) noexcept
Returns the size of the vector.
cimatrix & operator&=(const scimatrix &m1)
Implementation of intersection and allocation operation.
cimatrix_subv(cinterval *d, const int &l, const int &u, const int &s, const int &st, const int &o) noexcept
Constructor of class cimatrix_subv.
cimatrix_subv Col(cimatrix &m, const int &i) noexcept
Returns one column of the matrix as a vector.
friend rmatrix InfRe(const cimatrix_slice &v) noexcept
Returns the infimum of real part of the matrix.
Represents a row or column vector of a sparse matrix.
The Data Type cmatrix_slice.
The Data Type ivector_slice.
friend rmatrix InfIm(const cimatrix &v) noexcept
Returns the infimum of imaginary part of the matrix.
cimatrix & SetUb(cimatrix &m, const int &i, const int &j) noexcept
Sets the upper bound index.
The Data Type rvector_slice.
cimatrix_slice & operator|=(const scimatrix &m1)
Implementation of hull and allocation operation.
Represents a row or column vector of a sparse matrix.
civector operator*(const cimatrix_subv &rv, const cinterval &s) noexcept
Implementation of multiplication operation.
int Lb(const cimatrix &rm, const int &i) noexcept
Returns the lower bound index.
friend cimatrix_subv Col(cimatrix &m, const int &i) noexcept
Returns one column of the matrix as a vector.
friend int Ub(const cimatrix_subv &rv) noexcept
Returns the upper bound of the vector.
A sparse complex interval vector.
cimatrix & SetLb(cimatrix &m, const int &i, const int &j) noexcept
Sets the lower bound index.
cimatrix() noexcept
Constructor of class cimatrix.
Helper class for slices of sparse vectors.
friend rmatrix InfRe(const cimatrix &v) noexcept
Returns the infimum of real part of the matrix.
The Data Type rmatrix_subv.
cimatrix_subv operator[](const int &i) noexcept
Operator for accessing a single row of the matrix.
friend cimatrix_subv Row(cimatrix &m, const int &i) noexcept
Returns one row of the matrix as a vector.
cimatrix & operator()() noexcept
Operator for accessing the whole matrix.
cimatrix & operator+=(const scimatrix &m1)
Implementation of addition and allocation operation.
cimatrix_subv & SetUncheckedInf(cimatrix_subv &iv, const complex &r) noexcept
Returns the matrix with the new unchecked given infimum value.
The Data Type cidotprecision.
The namespace cxsc, providing all functionality of the class library C-XSC.
cimatrix_slice & operator/=(const cinterval &c) noexcept
Implementation of division and allocation operation.
cdotprecision & operator+=(cdotprecision &cd, const l_complex &lc) noexcept
Implementation of standard algebraic addition and allocation operation.
cimatrix_slice & operator+=(const cinterval &c) noexcept
Implementation of addition and allocation operation.
void DoubleSize(cimatrix &A)
Doubles the size of the matrix.
friend rmatrix SupIm(const cimatrix &v) noexcept
Returns the supremum of imaginary part of the matrix.
Helper class for slices of sparse vectors.
cimatrix_subv operator[](const int &i) const noexcept
Operator for accessing a single row of the matrix.
cimatrix transp(const cimatrix &A)
Returns the transposed matrix.
cvector diam(const cimatrix_subv &mv) noexcept
Returns the diameter of the matrix.
cimatrix_slice(cimatrix_slice &a, const int &l1, const int &u1, const int &l2, const int &u2) noexcept
Constructor of class cimatrix_slice.
The Data Type rmatrix_slice.
cimatrix_slice(cimatrix &a, const int &l1, const int &u1, const int &l2, const int &u2) noexcept
Constructor of class cimatrix_slice.
cimatrix _imatrix(const cimatrix &rm) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
cimatrix & operator*=(const scimatrix &m1)
Implementation of multiplication and allocation operation.
The Data Type cmatrix_subv.
cimatrix_slice & operator&=(const scimatrix &m1)
Implementation of intersection and allocation operation.
The Data Type cimatrix_slice.
cimatrix & operator=(const cinterval &r) noexcept
Implementation of standard assigning operator.
A sparse interval matrix.
cimatrix Id(const cimatrix &A)
Returns the Identity matrix.
The Scalar Type cinterval.
void Resize(cimatrix &A) noexcept
Resizes the matrix.
cimatrix_slice & operator*=(const cinterval &c) noexcept
Implementation of multiplication and allocation operation.
The Data Type cvector_slice.
cimatrix_subv Row(cimatrix &m, const int &i) noexcept
Returns one row of the matrix as a vector.
A sparse interval vector.
cimatrix_subv & operator*=(const cinterval &c) noexcept
Implementation of multiplication and allocation operation.
cimatrix_subv & operator()() noexcept
Operator for accessing the whole vector.
The Data Type cimatrix_subv.
cimatrix_subv(const cimatrix_subv &v) noexcept
Constructor of class cimatrix_subv.
cimatrix_subv & operator=(const scimatrix_subv &rv)
Implementation of standard assigning operator.
friend int Lb(const cimatrix_subv &rv) noexcept
Returns the lower bound of the vector.
Represents a row or column vector of a sparse matrix.
A slice of a sparse real matrix.