26 #ifndef _CXSC_RMATRIX_HPP_INCLUDED 27 #define _CXSC_RMATRIX_HPP_INCLUDED 29 #include "xscclass.hpp" 34 #include "rvector.hpp" 66 int size,start,offset;
72 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
79 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
86 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
93 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
101 #ifdef _CXSC_FRIEND_TPL 103 template <
class MV1,
class MV2>
friend MV1 &_mvmvassign(MV1 &v,
const MV2 &rv)
104 #if(CXSC_INDEX_CHECK) 105 throw(ERROR__OP_WITH_WRONG_DIM<MV1>);
109 template <
class MV,
class S>
friend MV &_mvsassign(MV &v,
const S &r)
throw();
110 template <
class MV,
class V>
friend MV &_mvvassign(MV &v,
const V &rv)
111 #if(CXSC_INDEX_CHECK) 112 throw(ERROR__OP_WITH_WRONG_DIM<MV>);
116 template <
class V,
class MV2,
class S>
friend V &_vmvassign(V &v,
const MV2 &rv)
throw();
117 template <
class MV,
class V>
friend V _mvabs(
const MV &mv)
throw();
118 template <
class DP,
class V,
class SV>
friend void _vmvaccu(DP &dp,
const V & rv1,
const SV &rv2)
119 #if(CXSC_INDEX_CHECK) 120 throw(OP_WITH_WRONG_DIM);
125 template <
class DP,
class MV1,
class MV2>
friend void _mvmvaccu(DP &dp,
const MV1 & rv1,
const MV2 &rv2)
126 #if(CXSC_INDEX_CHECK) 127 throw(OP_WITH_WRONG_DIM);
132 template <
class MV1,
class MV2,
class S>
friend S _mvmvmult(
const MV1 & rv1,
const MV2 &rv2)
133 #if(CXSC_INDEX_CHECK) 134 throw(ERROR__OP_WITH_WRONG_DIM<MV1>);
138 template <
class V,
class MV,
class S>
friend S _vmvmult(
const V &rv1,
const MV &rv2)
139 #if(CXSC_INDEX_CHECK) 140 throw(ERROR__OP_WITH_WRONG_DIM<MV>);
144 template <
class MV,
class S,
class E>
friend E _mvsmult(
const MV &rv,
const S &s)
throw();
145 template <
class MV1,
class MV2,
class E>
friend E _mvmvplus(
const MV1 &rv1,
const MV2 &rv2)
146 #if(CXSC_INDEX_CHECK) 147 throw(ERROR__OP_WITH_WRONG_DIM<E>);
151 template <
class MV1,
class MV2,
class E>
friend E _mvmvminus(
const MV1 &rv1,
const MV2 &rv2)
152 #if(CXSC_INDEX_CHECK) 153 throw(ERROR__OP_WITH_WRONG_DIM<E>);
157 template <
class MV,
class V,
class E>
friend E _mvvplus(
const MV &rv1,
const V &rv2)
158 #if(CXSC_INDEX_CHECK) 159 throw(ERROR__OP_WITH_WRONG_DIM<E>);
163 template <
class MV,
class V,
class E>
friend E _mvvminus(
const MV &rv1,
const V &rv2)
164 #if(CXSC_INDEX_CHECK) 165 throw(ERROR__OP_WITH_WRONG_DIM<E>);
169 template <
class V,
class MV,
class E>
friend E _vmvminus(
const V &rv1,
const MV &rv2)
170 #if(CXSC_INDEX_CHECK) 171 throw(ERROR__OP_WITH_WRONG_DIM<E>);
175 template <
class MV,
class S,
class E>
friend E _mvsdiv(
const MV &rv,
const S &s)
throw();
176 template <
class MV,
class S>
friend MV &_mvsmultassign(MV &v,
const S &r)
throw();
177 template <
class MV,
class S>
friend MV &_mvsplusassign(MV &v,
const S &r)
throw();
178 template <
class MV,
class S>
friend MV &_mvsminusassign(MV &v,
const S &r)
throw();
179 template <
class MV,
class S>
friend MV &_mvsdivassign(MV &v,
const S &r)
throw();
180 template <
class MV,
class V>
friend MV &_mvvplusassign(MV &v,
const V &rv)
181 #if(CXSC_INDEX_CHECK) 182 throw(ERROR__OP_WITH_WRONG_DIM<MV>);
186 template <
class V,
class MV>
friend V &_vmvplusassign(V &rv,
const MV &v)
187 #if(CXSC_INDEX_CHECK) 188 throw(ERROR__OP_WITH_WRONG_DIM<V>);
192 template <
class MV,
class V>
friend MV &_mvvminusassign(MV &v,
const V &rv)
193 #if(CXSC_INDEX_CHECK) 194 throw(ERROR__OP_WITH_WRONG_DIM<MV>);
198 template <
class V,
class MV>
friend V &_vmvminusassign(V &rv,
const MV &v)
199 #if(CXSC_INDEX_CHECK) 200 throw(ERROR__OP_WITH_WRONG_DIM<V>);
204 template <
class MV1,
class MV2,
class E>
friend E _mvmvconv(
const MV1 &rv1,
const MV2 &rv2)
205 #if(CXSC_INDEX_CHECK) 206 throw(ERROR__OP_WITH_WRONG_DIM<E>);
210 template <
class MV,
class V,
class E>
friend E _mvvconv(
const MV &rv1,
const V &rv2)
211 #if(CXSC_INDEX_CHECK) 212 throw(ERROR__OP_WITH_WRONG_DIM<E>);
220 template <
class V,
class MV>
friend V &_vmvsetinf(V &rv,
const MV &v)
221 #if(CXSC_INDEX_CHECK) 222 throw(ERROR__OP_WITH_WRONG_DIM<V>);
226 template <
class V,
class MV>
friend V &_vmvsetsup(V &rv,
const MV &v)
227 #if(CXSC_INDEX_CHECK) 228 throw(ERROR__OP_WITH_WRONG_DIM<V>);
232 template <
class V,
class MV>
friend V &_vmvusetinf(V &rv,
const MV &v)
233 #if(CXSC_INDEX_CHECK) 234 throw(ERROR__OP_WITH_WRONG_DIM<V>);
238 template <
class V,
class MV>
friend V &_vmvusetsup(V &rv,
const MV &v)
239 #if(CXSC_INDEX_CHECK) 240 throw(ERROR__OP_WITH_WRONG_DIM<V>);
248 template <
class V,
class MV>
friend V &_vmvsetim(V &rv,
const MV &v)
249 #if(CXSC_INDEX_CHECK) 250 throw(ERROR__OP_WITH_WRONG_DIM<V>);
254 template <
class V,
class MV>
friend V &_vmvsetre(V &rv,
const MV &v)
255 #if(CXSC_INDEX_CHECK) 256 throw(ERROR__OP_WITH_WRONG_DIM<V>);
266 explicit INLINE
rmatrix_subv (
real *d,
const int &l,
const int &u,
const int &s,
const int &st,
const int &o)
throw():dat(d),lb(l),ub(u),size(s),start(st),offset(o) { }
287 #if(CXSC_INDEX_CHECK) 288 throw(ERROR_RMATRIX_TYPE_CAST_OF_THICK_OBJ);
294 #if(CXSC_INDEX_CHECK) 295 throw(ERROR_RMATRIX_TYPE_CAST_OF_THICK_OBJ);
301 #if(CXSC_INDEX_CHECK) 302 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
308 #if(CXSC_INDEX_CHECK) 309 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
313 friend INLINE
int Lb(
const rmatrix_subv &rv)
throw() {
return rv.lb; }
322 #if(CXSC_INDEX_CHECK) 323 throw(ERROR_RVECTOR_ELEMENT_NOT_IN_VEC);
330 #if(CXSC_INDEX_CHECK) 331 throw(ERROR_RVECTOR_ELEMENT_NOT_IN_VEC);
340 #if(CXSC_INDEX_CHECK) 341 throw(ERROR_RVECTOR_SUB_ARRAY_TOO_BIG);
347 #if(CXSC_INDEX_CHECK) 348 throw(ERROR_RVECTOR_SUB_ARRAY_TOO_BIG);
378 #if(CXSC_INDEX_CHECK) 379 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
385 #if(CXSC_INDEX_CHECK) 386 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
392 #if(CXSC_INDEX_CHECK) 393 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
399 #if(CXSC_INDEX_CHECK) 400 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
411 INLINE rmatrix_subv
Row(rmatrix &m,
const int &i)
412 #if(CXSC_INDEX_CHECK) 413 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
419 INLINE rmatrix_subv
Col(rmatrix &m,
const int &i)
420 #if(CXSC_INDEX_CHECK) 421 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
427 INLINE rmatrix_subv
Row(
const rmatrix &m,
const int &i)
428 #if(CXSC_INDEX_CHECK) 429 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
435 INLINE rmatrix_subv
Col(
const rmatrix &m,
const int &i)
436 #if(CXSC_INDEX_CHECK) 437 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
481 int lb1,ub1,lb2,ub2,xsize,ysize;
484 double* to_blas_array()
const {
return (
double*)dat; }
486 #ifdef _CXSC_FRIEND_TPL 488 template <
class S,
class M>
friend void _smconstr(S &s,
const M &m)
489 #if(CXSC_INDEX_CHECK) 490 throw(ERROR__TYPE_CAST_OF_THICK_OBJ<M>,ERROR__USE_OF_UNINITIALIZED_OBJ<M>);
494 template <
class V,
class M,
class S>
friend void _vmconstr(V &v,
const M &m)
495 #if(CXSC_INDEX_CHECK) 496 throw(ERROR__TYPE_CAST_OF_THICK_OBJ<M>);
500 template <
class M1,
class M2,
class S>
friend M1 &_mmassign(M1 &m1,
const M2 &m,S ms)
throw();
501 template <
class M,
class MS2,
class S>
friend M &_mmsassign(M &m,
const MS2 &ms)
throw();
502 template <
class MS,
class M>
friend MS &_msmassign(MS &ms,
const M &m)
503 #if(CXSC_INDEX_CHECK) 504 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
508 template <
class M,
class S>
friend M &_msassign(M &m,
const S &r)
throw();
509 template <
class V,
class M,
class S>
friend V &_vmassign(V &v,
const M &m)
510 #if(CXSC_INDEX_CHECK) 511 throw(ERROR__TYPE_CAST_OF_THICK_OBJ<M>);
515 template <
class M,
class V,
class S>
friend M &_mvassign(M &m,
const V &v)
throw();
516 template <
class M>
friend int _mlb(
const M &m,
const int &i)
517 #if(CXSC_INDEX_CHECK) 518 throw(ERROR__WRONG_ROW_OR_COL<M>);
522 template <
class M>
friend int _mub(
const M &m,
const int &i)
523 #if(CXSC_INDEX_CHECK) 524 throw(ERROR__WRONG_ROW_OR_COL<M>);
528 template <
class M>
friend M &_msetlb(M &m,
const int &i,
const int &j)
529 #if(CXSC_INDEX_CHECK) 530 throw(ERROR__WRONG_ROW_OR_COL<M>);
534 template <
class M>
friend M &_msetub(M &m,
const int &i,
const int &j)
535 #if(CXSC_INDEX_CHECK) 536 throw(ERROR__WRONG_ROW_OR_COL<M>);
540 template <
class M>
friend void _mresize(M &A)
throw();
541 template <
class M,
class S>
friend void _mresize(M &A,
const int &m,
const int &n)
542 #if(CXSC_INDEX_CHECK) 543 throw(ERROR__WRONG_BOUNDARIES<M>);
547 template <
class M,
class S>
friend void _mresize(M &A,
const int &m1,
const int &m2,
const int &n1,
const int &n2)
548 #if(CXSC_INDEX_CHECK) 549 throw(ERROR__WRONG_BOUNDARIES<M>);
553 template <
class M,
class E>
friend E _mabs(
const M &m)
throw();
554 template <
class MS,
class E>
friend E _msabs(
const MS &ms)
throw();
556 template <
class M1,
class M2,
class E>
friend E _mmplus(
const M1 &m1,
const M2 &m2)
557 #if(CXSC_INDEX_CHECK) 558 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
562 template <
class M,
class MS,
class E>
friend E _mmsplus(
const M &m,
const MS &ms)
563 #if(CXSC_INDEX_CHECK) 564 throw(ERROR__OP_WITH_WRONG_DIM<M>);
568 template <
class MS1,
class MS2,
class E>
friend E _msmsplus(
const MS1 &m1,
const MS2 &m2)
569 #if(CXSC_INDEX_CHECK) 570 throw(ERROR__OP_WITH_WRONG_DIM<E>);
574 template <
class M>
friend M _mminus(
const M &m)
throw();
575 template <
class MS,
class E>
friend E _msminus(
const MS &ms)
throw();
576 template <
class M1,
class M2,
class E>
friend E _mmminus(
const M1 &m1,
const M2 &m2)
577 #if(CXSC_INDEX_CHECK) 578 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
582 template <
class M1,
class M2>
friend M1 &_mmplusassign(M1 &m1,
const M2 &m2)
583 #if(CXSC_INDEX_CHECK) 584 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
588 template <
class M,
class MS>
friend M &_mmsplusassign(M &m1,
const MS &ms)
589 #if(CXSC_INDEX_CHECK) 590 throw(ERROR__OP_WITH_WRONG_DIM<M>);
594 template <
class MS,
class M>
friend MS &_msmplusassign(MS &ms,
const M &m1)
595 #if(CXSC_INDEX_CHECK) 596 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
600 template <
class M,
class MS,
class E>
friend E _mmsminus(
const M &m,
const MS &ms)
601 #if(CXSC_INDEX_CHECK) 602 throw(ERROR__OP_WITH_WRONG_DIM<E>);
606 template <
class MS,
class M,
class E>
friend E _msmminus(
const MS &ms,
const M &m)
607 #if(CXSC_INDEX_CHECK) 608 throw(ERROR__OP_WITH_WRONG_DIM<E>);
612 template <
class MS1,
class MS2,
class E>
friend E _msmsminus(
const MS1 &ms1,
const MS2 &ms2)
613 #if(CXSC_INDEX_CHECK) 614 throw(ERROR__OP_WITH_WRONG_DIM<E>);
618 template <
class M1,
class M2>
friend M1 &_mmminusassign(M1 &m1,
const M2 &m2)
619 #if(CXSC_INDEX_CHECK) 620 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
624 template <
class M,
class MS>
friend M &_mmsminusassign(M &m1,
const MS &ms)
625 #if(CXSC_INDEX_CHECK) 626 throw(ERROR__OP_WITH_WRONG_DIM<M>);
630 template <
class MS,
class M>
friend MS &_msmminusassign(MS &ms,
const M &m1)
631 #if(CXSC_INDEX_CHECK) 632 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
636 template <
class M1,
class M2,
class E>
friend E _mmmult(
const M1 &m1,
const M2 &m2)
637 #if(CXSC_INDEX_CHECK) 638 throw(ERROR__OP_WITH_WRONG_DIM<E>);
642 template <
class M1,
class M2,
class S>
friend M1 &_mmmultassign(M1 &m1,
const M2 &m2)
643 #if(CXSC_INDEX_CHECK) 644 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
648 template <
class M,
class MS,
class E>
friend E _mmsmult(
const M &m1,
const MS &ms)
649 #if(CXSC_INDEX_CHECK) 650 throw(ERROR__OP_WITH_WRONG_DIM<E>);
654 template <
class MS,
class M,
class E>
friend E _msmmult(
const MS &ms,
const M &m2)
655 #if(CXSC_INDEX_CHECK) 656 throw(ERROR__OP_WITH_WRONG_DIM<E>);
660 template <
class M,
class MS,
class S>
friend M &_mmsmultassign(M &m1,
const MS &ms)
661 #if(CXSC_INDEX_CHECK) 662 throw(ERROR__OP_WITH_WRONG_DIM<M>);
666 template <
class MS1,
class MS2,
class E>
friend E _msmsmult(
const MS1 &ms1,
const MS2 &ms2)
667 #if(CXSC_INDEX_CHECK) 668 throw(ERROR__OP_WITH_WRONG_DIM<E>);
672 template <
class M1,
class M2,
class E>
friend E _mmconv(
const M1 &m1,
const M2 &m2)
673 #if(CXSC_INDEX_CHECK) 674 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
678 template <
class M,
class MS,
class E>
friend E _mmsconv(
const M &m,
const MS &ms)
679 #if(CXSC_INDEX_CHECK) 680 throw(ERROR__OP_WITH_WRONG_DIM<M>);
685 template <
class S,
class M,
class E>
friend E _smmult(
const S &c,
const M &m)
throw();
686 template <
class M,
class S>
friend M &_msmultassign(M &m,
const S &c)
throw();
687 template <
class S,
class MS,
class E>
friend E _smsmult(
const S &c,
const MS &ms)
throw();
688 template <
class M,
class S,
class E>
friend E _msdiv(
const M &m,
const S &c)
throw();
689 template <
class M,
class S>
friend M &_msdivassign(M &m,
const S &c)
throw();
690 template <
class MS,
class S,
class E>
friend E _mssdiv(
const MS &ms,
const S &c)
throw();
692 template <
class M,
class V,
class E>
friend E _mvmult(
const M &m,
const V &v)
693 #if(CXSC_INDEX_CHECK) 694 throw(ERROR__OP_WITH_WRONG_DIM<M>);
698 template <
class V,
class M,
class E>
friend E _vmmult(
const V &v,
const M &m)
699 #if(CXSC_INDEX_CHECK) 700 throw(ERROR__OP_WITH_WRONG_DIM<M>);
704 template <
class V,
class M,
class S>
friend V &_vmmultassign(V &v,
const M &m)
705 #if(CXSC_INDEX_CHECK) 706 throw(ERROR__OP_WITH_WRONG_DIM<M>);
710 template <
class VS,
class M,
class S>
friend VS &_vsmmultassign(VS &v,
const M &m)
711 #if(CXSC_INDEX_CHECK) 712 throw(ERROR__OP_WITH_WRONG_DIM<M>);
717 template <
class M>
friend void *_mvoid(
const M &m)
throw();
718 template <
class M>
friend bool _mnot(
const M &m)
throw();
719 template <
class MS>
friend void *_msvoid(
const MS &ms)
throw();
720 template <
class MS>
friend bool _msnot(
const MS &ms)
throw();
721 template <
class M1,
class M2>
friend bool _mmeq(
const M1 &m1,
const M2 &m2)
throw();
722 template <
class M1,
class M2>
friend bool _mmneq(
const M1 &m1,
const M2 &m2)
throw();
723 template <
class M1,
class M2>
friend bool _mmless(
const M1 &m1,
const M2 &m2)
throw();
724 template <
class M1,
class M2>
friend bool _mmleq(
const M1 &m1,
const M2 &m2)
throw();
725 template <
class M,
class MS>
friend bool _mmseq(
const M &m1,
const MS &ms)
throw();
726 template <
class M,
class MS>
friend bool _mmsneq(
const M &m1,
const MS &ms)
throw();
727 template <
class M,
class MS>
friend bool _mmsless(
const M &m1,
const MS &ms)
throw();
728 template <
class M,
class MS>
friend bool _mmsleq(
const M &m1,
const MS &ms)
throw();
729 template <
class MS,
class M>
friend bool _msmless(
const MS &ms,
const M &m1)
throw();
730 template <
class MS,
class M>
friend bool _msmleq(
const MS &ms,
const M &m1)
throw();
731 template <
class M>
friend std::ostream &_mout(std::ostream &s,
const M &r)
throw();
732 template <
class M>
friend std::istream &_min(std::istream &s,M &r)
throw();
736 template <
class MV,
class V>
friend MV &_mvvassign(MV &v,
const V &rv)
737 #if(CXSC_INDEX_CHECK) 738 throw(ERROR__OP_WITH_WRONG_DIM<MV>);
743 template <
class M,
class E>
friend E _mdiam(
const M &m)
throw();
744 template <
class M,
class E>
friend E _mmid(
const M &m)
throw();
745 template <
class MS,
class E>
friend E _msdiam(
const MS &ms)
throw();
746 template <
class MS,
class E>
friend E _msmid(
const MS &ms)
throw();
747 template <
class M,
class E>
friend E _minf(
const M &m)
throw();
748 template <
class M,
class E>
friend E _msup(
const M &m)
throw();
749 template <
class M1,
class M2>
friend M1 &_mmsetinf(M1 &m1,
const M2 &m2)
750 #if(CXSC_INDEX_CHECK) 751 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
755 template <
class M1,
class M2>
friend M1 &_mmsetsup(M1 &m1,
const M2 &m2)
756 #if(CXSC_INDEX_CHECK) 757 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
761 template <
class M1,
class M2>
friend M1 &_mmusetinf(M1 &m1,
const M2 &m2)
762 #if(CXSC_INDEX_CHECK) 763 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
767 template <
class M1,
class M2>
friend M1 &_mmusetsup(M1 &m1,
const M2 &m2)
768 #if(CXSC_INDEX_CHECK) 769 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
773 template <
class MS,
class E>
friend E _msinf(
const MS &ms)
throw();
774 template <
class MS,
class E>
friend E _mssup(
const MS &ms)
throw();
775 template <
class MS1,
class M2>
friend MS1 &_msmsetinf(MS1 &ms1,
const M2 &m2)
776 #if(CXSC_INDEX_CHECK) 777 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
781 template <
class MS1,
class M2>
friend MS1 &_msmsetsup(MS1 &ms1,
const M2 &m2)
782 #if(CXSC_INDEX_CHECK) 783 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
787 template <
class MS1,
class M2>
friend MS1 &_msmusetinf(MS1 &ms1,
const M2 &m2)
788 #if(CXSC_INDEX_CHECK) 789 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
793 template <
class MS1,
class M2>
friend MS1 &_msmusetsup(MS1 &ms1,
const M2 &m2)
794 #if(CXSC_INDEX_CHECK) 795 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
801 template <
class M1,
class M2,
class E>
friend E _mmimult(
const M1 &m1,
const M2 &m2)
802 #if(CXSC_INDEX_CHECK) 803 throw(ERROR__OP_WITH_WRONG_DIM<E>);
808 template <
class M1,
class M2,
class S>
friend M1 &_mmimultassign(M1 &m1,
const M2 &m2)
809 #if(CXSC_INDEX_CHECK) 810 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
814 template <
class M,
class MS,
class E>
friend E _mmsimult(
const M &m1,
const MS &ms)
815 #if(CXSC_INDEX_CHECK) 816 throw(ERROR__OP_WITH_WRONG_DIM<E>);
821 template <
class MS,
class M,
class E>
friend E _msmimult(
const MS &ms,
const M &m2)
822 #if(CXSC_INDEX_CHECK) 823 throw(ERROR__OP_WITH_WRONG_DIM<E>);
828 template <
class M,
class MS,
class S>
friend M &_mmsimultassign(M &m1,
const MS &ms)
829 #if(CXSC_INDEX_CHECK) 830 throw(ERROR__OP_WITH_WRONG_DIM<M>);
834 template <
class MS1,
class MS2,
class E>
friend E _msmsimult(
const MS1 &ms1,
const MS2 &ms2)
835 #if(CXSC_INDEX_CHECK) 836 throw(ERROR__OP_WITH_WRONG_DIM<E>);
841 template <
class M1,
class M2>
friend M1 &_mmconvassign(M1 &m1,
const M2 &m2)
842 #if(CXSC_INDEX_CHECK) 843 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
847 template <
class M,
class MS>
friend M &_mmsconvassign(M &m1,
const MS &ms)
848 #if(CXSC_INDEX_CHECK) 849 throw(ERROR__OP_WITH_WRONG_DIM<M>);
853 template <
class MS,
class M>
friend MS &_msmconvassign(MS &ms,
const M &m1)
854 #if(CXSC_INDEX_CHECK) 855 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
859 template <
class MS1,
class MS2,
class E>
friend E _msmsconv(
const MS1 &m1,
const MS2 &m2)
860 #if(CXSC_INDEX_CHECK) 861 throw(ERROR__OP_WITH_WRONG_DIM<E>);
865 template <
class M1,
class M2,
class E>
friend E _mmsect(
const M1 &m1,
const M2 &m2)
866 #if(CXSC_INDEX_CHECK) 867 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
871 template <
class M,
class MS,
class E>
friend E _mmssect(
const M &m,
const MS &ms)
872 #if(CXSC_INDEX_CHECK) 873 throw(ERROR__OP_WITH_WRONG_DIM<M>);
878 template <
class M1,
class M2>
friend M1 &_mmsectassign(M1 &m1,
const M2 &m2)
879 #if(CXSC_INDEX_CHECK) 880 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
884 template <
class M,
class MS>
friend M &_mmssectassign(M &m1,
const MS &ms)
885 #if(CXSC_INDEX_CHECK) 886 throw(ERROR__OP_WITH_WRONG_DIM<M>);
890 template <
class MS,
class M>
friend MS &_msmsectassign(MS &ms,
const M &m1)
891 #if(CXSC_INDEX_CHECK) 892 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
896 template <
class MS1,
class MS2,
class E>
friend E _msmssect(
const MS1 &m1,
const MS2 &m2)
897 #if(CXSC_INDEX_CHECK) 898 throw(ERROR__OP_WITH_WRONG_DIM<E>);
903 template <
class M,
class V,
class E>
friend E _mvimult(
const M &m,
const V &v)
904 #if(CXSC_INDEX_CHECK) 905 throw(ERROR__OP_WITH_WRONG_DIM<M>);
909 template <
class MS,
class V,
class E>
friend E _msvimult(
const MS &ms,
const V &v)
910 #if(CXSC_INDEX_CHECK) 911 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
915 template <
class V,
class MS,
class E>
friend E _vmsimult(
const V &v,
const MS &ms)
916 #if(CXSC_INDEX_CHECK) 917 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
923 template <
class V,
class M,
class E>
friend E _vmimult(
const V &v,
const M &m)
924 #if(CXSC_INDEX_CHECK) 925 throw(ERROR__OP_WITH_WRONG_DIM<M>);
929 template <
class V,
class M,
class S>
friend V &_vmimultassign(V &v,
const M &m)
930 #if(CXSC_INDEX_CHECK) 931 throw(ERROR__OP_WITH_WRONG_DIM<M>);
935 template <
class VS,
class M,
class S>
friend VS &_vsmimultassign(VS &v,
const M &m)
936 #if(CXSC_INDEX_CHECK) 937 throw(ERROR__OP_WITH_WRONG_DIM<M>);
945 template <
class M,
class E>
friend E _mre(
const M &m)
throw();
946 template <
class M,
class E>
friend E _mim(
const M &m)
throw();
947 template <
class M1,
class M2>
friend M1 &_mmsetre(M1 &m1,
const M2 &m2)
948 #if(CXSC_INDEX_CHECK) 949 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
953 template <
class M1,
class M2>
friend M1 &_mmsetim(M1 &m1,
const M2 &m2)
954 #if(CXSC_INDEX_CHECK) 955 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
959 template <
class MS,
class E>
friend E _msre(
const MS &ms)
throw();
960 template <
class MS,
class E>
friend E _msim(
const MS &ms)
throw();
961 template <
class MS1,
class M2>
friend MS1 &_msmsetre(MS1 &ms1,
const M2 &m2)
962 #if(CXSC_INDEX_CHECK) 963 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
967 template <
class MS1,
class M2>
friend MS1 &_msmsetim(MS1 &ms1,
const M2 &m2)
968 #if(CXSC_INDEX_CHECK) 969 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
975 template <
class M1,
class M2,
class E>
friend E _mmcmult(
const M1 &m1,
const M2 &m2)
976 #if(CXSC_INDEX_CHECK) 977 throw(ERROR__OP_WITH_WRONG_DIM<E>);
982 template <
class M1,
class M2,
class S>
friend M1 &_mmcmultassign(M1 &m1,
const M2 &m2)
983 #if(CXSC_INDEX_CHECK) 984 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
988 template <
class M,
class MS,
class E>
friend E _mmscmult(
const M &m1,
const MS &ms)
989 #if(CXSC_INDEX_CHECK) 990 throw(ERROR__OP_WITH_WRONG_DIM<E>);
995 template <
class MS,
class M,
class E>
friend E _msmcmult(
const MS &ms,
const M &m2)
996 #if(CXSC_INDEX_CHECK) 997 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1002 template <
class M,
class MS,
class S>
friend M &_mmscmultassign(M &m1,
const MS &ms)
1003 #if(CXSC_INDEX_CHECK) 1004 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1008 template <
class MS1,
class MS2,
class E>
friend E _msmscmult(
const MS1 &ms1,
const MS2 &ms2)
1009 #if(CXSC_INDEX_CHECK) 1010 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1016 template <
class M,
class V,
class E>
friend E _mvcmult(
const M &m,
const V &v)
1017 #if(CXSC_INDEX_CHECK) 1018 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1022 template <
class MS,
class V,
class E>
friend E _msvcmult(
const MS &ms,
const V &v)
1023 #if(CXSC_INDEX_CHECK) 1024 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1028 template <
class V,
class MS,
class E>
friend E _vmscmult(
const V &v,
const MS &ms)
1029 #if(CXSC_INDEX_CHECK) 1030 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1035 template <
class V,
class M,
class E>
friend E _vmcmult(
const V &v,
const M &m)
1036 #if(CXSC_INDEX_CHECK) 1037 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1041 template <
class V,
class M,
class S>
friend V &_vmcmultassign(V &v,
const M &m)
1042 #if(CXSC_INDEX_CHECK) 1043 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1047 template <
class VS,
class M,
class S>
friend VS &_vsmcmultassign(VS &v,
const M &m)
1048 #if(CXSC_INDEX_CHECK) 1049 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1076 template <
class M1,
class M2,
class E>
friend E _mmcimult(
const M1 &m1,
const M2 &m2)
1077 #if(CXSC_INDEX_CHECK) 1078 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1082 template <
class M1,
class M2,
class S>
friend M1 &_mmcimultassign(M1 &m1,
const M2 &m2)
1083 #if(CXSC_INDEX_CHECK) 1084 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1088 template <
class M,
class MS,
class E>
friend E _mmscimult(
const M &m1,
const MS &ms)
1089 #if(CXSC_INDEX_CHECK) 1090 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1094 template <
class MS,
class M,
class E>
friend E _msmcimult(
const MS &ms,
const M &m2)
1095 #if(CXSC_INDEX_CHECK) 1096 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1100 template <
class M,
class MS,
class S>
friend M &_mmscimultassign(M &m1,
const MS &ms)
1101 #if(CXSC_INDEX_CHECK) 1102 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1106 template <
class MS1,
class MS2,
class E>
friend E _msmscimult(
const MS1 &ms1,
const MS2 &ms2)
1107 #if(CXSC_INDEX_CHECK) 1108 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1114 template <
class M,
class V,
class E>
friend E _mvcimult(
const M &m,
const V &v)
1115 #if(CXSC_INDEX_CHECK) 1116 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1120 template <
class MS,
class V,
class E>
friend E _msvcimult(
const MS &ms,
const V &v)
1121 #if(CXSC_INDEX_CHECK) 1122 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1126 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
1127 #if(CXSC_INDEX_CHECK) 1128 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1133 template <
class V,
class M,
class E>
friend E _vmcimult(
const V &v,
const M &m)
1134 #if(CXSC_INDEX_CHECK) 1135 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1139 template <
class V,
class M,
class S>
friend V &_vmcimultassign(V &v,
const M &m)
1140 #if(CXSC_INDEX_CHECK) 1141 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1145 template <
class VS,
class M,
class S>
friend VS &_vsmcimultassign(VS &v,
const M &m)
1146 #if(CXSC_INDEX_CHECK) 1147 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1154 template <
class M1,
class M2,
class E>
friend E _mmlmult(
const M1 &m1,
const M2 &m2)
1155 #if(CXSC_INDEX_CHECK) 1156 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1160 template <
class M1,
class M2,
class S>
friend M1 &_mmlmultassign(M1 &m1,
const M2 &m2)
1161 #if(CXSC_INDEX_CHECK) 1162 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1166 template <
class M,
class MS,
class E>
friend E _mmslmult(
const M &m1,
const MS &ms)
1167 #if(CXSC_INDEX_CHECK) 1168 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1173 template <
class MS,
class M,
class E>
friend E _msmlmult(
const MS &ms,
const M &m2)
1174 #if(CXSC_INDEX_CHECK) 1175 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1180 template <
class M,
class MS,
class S>
friend M &_mmslmultassign(M &m1,
const MS &ms)
1181 #if(CXSC_INDEX_CHECK) 1182 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1186 template <
class MS1,
class MS2,
class E>
friend E _msmslmult(
const MS1 &ms1,
const MS2 &ms2)
1187 #if(CXSC_INDEX_CHECK) 1188 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1193 template <
class M,
class V,
class E>
friend E _mvlmult(
const M &m,
const V &v)
1194 #if(CXSC_INDEX_CHECK) 1195 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1199 template <
class MS,
class V,
class E>
friend E _msvlmult(
const MS &ms,
const V &v)
1200 #if(CXSC_INDEX_CHECK) 1201 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1205 template <
class V,
class MS,
class E>
friend E _vmslmult(
const V &v,
const MS &ms)
1206 #if(CXSC_INDEX_CHECK) 1207 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1212 template <
class V,
class M,
class E>
friend E _vmlmult(
const V &v,
const M &m)
1213 #if(CXSC_INDEX_CHECK) 1214 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1218 template <
class V,
class M,
class S>
friend V &_vmlmultassign(V &v,
const M &m)
1219 #if(CXSC_INDEX_CHECK) 1220 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1227 template <
class M1,
class M2,
class E>
friend E _mmlimult(
const M1 &m1,
const M2 &m2)
1228 #if(CXSC_INDEX_CHECK) 1229 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1234 template <
class M1,
class M2,
class S>
friend M1 &_mmlimultassign(M1 &m1,
const M2 &m2)
1235 #if(CXSC_INDEX_CHECK) 1236 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1240 template <
class M,
class MS,
class E>
friend E _mmslimult(
const M &m1,
const MS &ms)
1241 #if(CXSC_INDEX_CHECK) 1242 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1247 template <
class MS,
class M,
class E>
friend E _msmlimult(
const MS &ms,
const M &m2)
1248 #if(CXSC_INDEX_CHECK) 1249 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1254 template <
class M,
class MS,
class S>
friend M &_mmslimultassign(M &m1,
const MS &ms)
1255 #if(CXSC_INDEX_CHECK) 1256 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1260 template <
class MS1,
class MS2,
class E>
friend E _msmslimult(
const MS1 &ms1,
const MS2 &ms2)
1261 #if(CXSC_INDEX_CHECK) 1262 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1269 template <
class M,
class V,
class E>
friend E _mvlimult(
const M &m,
const V &v)
1270 #if(CXSC_INDEX_CHECK) 1271 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1275 template <
class MS,
class V,
class E>
friend E _msvlimult(
const MS &ms,
const V &v)
1276 #if(CXSC_INDEX_CHECK) 1277 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1281 template <
class V,
class MS,
class E>
friend E _vmslimult(
const V &v,
const MS &ms)
1282 #if(CXSC_INDEX_CHECK) 1283 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1288 template <
class V,
class M,
class E>
friend E _vmlimult(
const V &v,
const M &m)
1289 #if(CXSC_INDEX_CHECK) 1290 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1294 template <
class V,
class M,
class S>
friend V &_vmlimultassign(V &v,
const M &m)
1295 #if(CXSC_INDEX_CHECK) 1296 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1300 template <
class VS,
class M,
class S>
friend VS &_vsmlimultassign(VS &v,
const M &m)
1301 #if(CXSC_INDEX_CHECK) 1302 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1318 explicit INLINE
rmatrix(
const int &m,
const int &n)
1319 #if(CXSC_INDEX_CHECK) 1320 throw(ERROR_RMATRIX_WRONG_BOUNDARIES);
1324 explicit INLINE
rmatrix(
const int &m1,
const int &n1,
const int &m2,
const int &n2)
1326 #if(CXSC_INDEX_CHECK) 1327 throw(ERROR_RMATRIX_WRONG_BOUNDARIES);
1385 INLINE ~
rmatrix()
throw() {
delete [] dat; }
1390 #if(CXSC_INDEX_CHECK) 1391 throw(ERROR_RMATRIX_TYPE_CAST_OF_THICK_OBJ,ERROR_RMATRIX_USE_OF_UNINITIALIZED_OBJ);
1396 #if(CXSC_INDEX_CHECK) 1397 throw(ERROR_RMATRIX_TYPE_CAST_OF_THICK_OBJ);
1403 #if(CXSC_INDEX_CHECK) 1404 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
1410 #if(CXSC_INDEX_CHECK) 1411 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
1419 #if(CXSC_INDEX_CHECK) 1420 throw(ERROR_RMATRIX_SUB_ARRAY_TOO_BIG);
1426 #if(CXSC_INDEX_CHECK) 1427 throw(ERROR_RMATRIX_SUB_ARRAY_TOO_BIG);
1431 INLINE
operator void*()
throw();
1452 int offset1,offset2,mxsize,mysize;
1453 int start1,end1,start2,end2,sxsize,sysize;
1457 #ifdef _CXSC_FRIEND_TPL 1459 template <
class V,
class MS,
class S>
friend void _vmsconstr(V &v,
const MS &m)
1460 #if(CXSC_INDEX_CHECK) 1461 throw(ERROR__TYPE_CAST_OF_THICK_OBJ<MS>);
1465 template <
class MS,
class M>
friend MS &_msmassign(MS &ms,
const M &m)
1466 #if(CXSC_INDEX_CHECK) 1467 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1471 template <
class MS1,
class MS2>
friend MS1 &_msmsassign(MS1 &ms1,
const MS2 &ms)
1472 #if(CXSC_INDEX_CHECK) 1473 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1477 template <
class M,
class MS2,
class S>
friend M &_mmsassign(M &m,
const MS2 &ms)
throw();
1478 template <
class MS,
class S>
friend MS &_mssassign(MS &ms,
const S &r)
throw();
1479 template <
class MS>
friend int _mslb(
const MS &ms,
const int &i)
1480 #if(CXSC_INDEX_CHECK) 1481 throw(ERROR__WRONG_ROW_OR_COL<MS>);
1485 template <
class MS>
friend int _msub(
const MS &ms,
const int &i)
1486 #if(CXSC_INDEX_CHECK) 1487 throw(ERROR__WRONG_ROW_OR_COL<MS>);
1491 template <
class MS,
class E>
friend E _msabs(
const MS &ms)
throw();
1493 template <
class MS,
class E>
friend E _msminus(
const MS &ms)
throw();
1494 template <
class M,
class MS,
class E>
friend E _mmsplus(
const M &m,
const MS &ms)
1495 #if(CXSC_INDEX_CHECK) 1496 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1500 template <
class MS1,
class MS2,
class E>
friend E _msmsplus(
const MS1 &m1,
const MS2 &m2)
1501 #if(CXSC_INDEX_CHECK) 1502 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1506 template <
class M,
class MS>
friend M &_mmsplusassign(M &m1,
const MS &ms)
1507 #if(CXSC_INDEX_CHECK) 1508 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1512 template <
class MS,
class M>
friend MS &_msmplusassign(MS &ms,
const M &m1)
1513 #if(CXSC_INDEX_CHECK) 1514 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1518 template <
class MS1,
class MS2>
friend MS1 &_msmsplusassign(MS1 &ms1,
const MS2 &ms2)
1519 #if(CXSC_INDEX_CHECK) 1520 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1524 template <
class M,
class MS,
class E>
friend E _mmsminus(
const M &m,
const MS &ms)
1525 #if(CXSC_INDEX_CHECK) 1526 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1530 template <
class MS,
class M,
class E>
friend E _msmminus(
const MS &ms,
const M &m)
1531 #if(CXSC_INDEX_CHECK) 1532 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1536 template <
class MS1,
class MS2,
class E>
friend E _msmsminus(
const MS1 &ms1,
const MS2 &ms2)
1537 #if(CXSC_INDEX_CHECK) 1538 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1542 template <
class M,
class MS>
friend M &_mmsminusassign(M &m1,
const MS &ms)
1543 #if(CXSC_INDEX_CHECK) 1544 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1548 template <
class MS,
class M>
friend MS &_msmminusassign(MS &ms,
const M &m1)
1549 #if(CXSC_INDEX_CHECK) 1550 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1554 template <
class MS1,
class MS2>
friend MS1 &_msmsminusassign(MS1 &ms1,
const MS2 &ms2)
1555 #if(CXSC_INDEX_CHECK) 1556 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1560 template <
class M,
class MS,
class E>
friend E _mmsmult(
const M &m1,
const MS &ms)
1561 #if(CXSC_INDEX_CHECK) 1562 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1566 template <
class MS,
class M,
class E>
friend E _msmmult(
const MS &ms,
const M &m2)
1567 #if(CXSC_INDEX_CHECK) 1568 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1572 template <
class M,
class MS,
class S>
friend M &_mmsmultassign(M &m1,
const MS &ms)
1573 #if(CXSC_INDEX_CHECK) 1574 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1578 template <
class MS1,
class MS2,
class E>
friend E _msmsmult(
const MS1 &ms1,
const MS2 &ms2)
1579 #if(CXSC_INDEX_CHECK) 1580 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1584 template <
class M,
class MS,
class E>
friend E _mmsconv(
const M &m,
const MS &ms)
1585 #if(CXSC_INDEX_CHECK) 1586 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1590 template <
class MS1,
class MS2,
class E>
friend E _msmsconv(
const MS1 &m1,
const MS2 &m2)
1591 #if(CXSC_INDEX_CHECK) 1592 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1597 template <
class MS,
class V,
class E>
friend E _msvmult(
const MS &ms,
const V &v)
1598 #if(CXSC_INDEX_CHECK) 1599 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1603 template <
class V,
class MS,
class E>
friend E _vmsmult(
const V &v,
const MS &ms)
1604 #if(CXSC_INDEX_CHECK) 1605 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1609 template <
class V,
class MS,
class S>
friend V &_vmsmultassign(V &v,
const MS &ms)
1610 #if(CXSC_INDEX_CHECK) 1611 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1616 template <
class S,
class MS,
class E>
friend E _smsmult(
const S &c,
const MS &ms)
throw();
1617 template <
class MS,
class S>
friend MS &_mssmultassign(MS &ms,
const S &c)
throw();
1618 template <
class MS,
class S,
class E>
friend E _mssdiv(
const MS &ms,
const S &c)
throw();
1619 template <
class MS,
class S>
friend MS &_mssdivassign(MS &ms,
const S &c)
throw();
1621 template <
class MS>
friend void *_msvoid(
const MS &ms)
throw();
1622 template <
class MS>
friend bool _msnot(
const MS &ms)
throw();
1623 template <
class M,
class MS>
friend bool _mmseq(
const M &m1,
const MS &ms)
throw();
1624 template <
class M,
class MS>
friend bool _mmsneq(
const M &m1,
const MS &ms)
throw();
1625 template <
class M,
class MS>
friend bool _mmsless(
const M &m1,
const MS &ms)
throw();
1626 template <
class M,
class MS>
friend bool _mmsleq(
const M &m1,
const MS &ms)
throw();
1627 template <
class MS,
class M>
friend bool _msmless(
const MS &ms,
const M &m1)
throw();
1628 template <
class MS,
class M>
friend bool _msmleq(
const MS &ms,
const M &m1)
throw();
1629 template <
class MS1,
class MS2>
friend bool _msmseq(
const MS1 &ms1,
const MS2 &ms2)
throw();
1630 template <
class MS1,
class MS2>
friend bool _msmsneq(
const MS1 &ms1,
const MS2 &ms2)
throw();
1631 template <
class MS1,
class MS2>
friend bool _msmsless(
const MS1 &ms1,
const MS2 &ms2)
throw();
1632 template <
class MS1,
class MS2>
friend bool _msmsleq(
const MS1 &ms1,
const MS2 &ms2)
throw();
1633 template <
class MS>
friend std::ostream &_msout(std::ostream &s,
const MS &r)
throw();
1634 template <
class MS>
friend std::istream &_msin(std::istream &s,MS &r)
throw();
1637 template <
class M1,
class MS2>
friend M1 &_mmssetinf(M1 &m1,
const MS2 &ms2)
1638 #if(CXSC_INDEX_CHECK) 1639 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1643 template <
class M1,
class MS2>
friend M1 &_mmssetsup(M1 &m1,
const MS2 &ms2)
1644 #if(CXSC_INDEX_CHECK) 1645 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1649 template <
class M1,
class MS2>
friend M1 &_mmsusetinf(M1 &m1,
const MS2 &ms2)
1650 #if(CXSC_INDEX_CHECK) 1651 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1655 template <
class M1,
class MS2>
friend M1 &_mmsusetsup(M1 &m1,
const MS2 &ms2)
1656 #if(CXSC_INDEX_CHECK) 1657 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1661 template <
class MS1,
class MS2>
friend MS1 &_msmssetinf(MS1 &ms1,
const MS2 &ms2)
1662 #if(CXSC_INDEX_CHECK) 1663 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1667 template <
class MS1,
class MS2>
friend MS1 &_msmssetsup(MS1 &ms1,
const MS2 &ms2)
1668 #if(CXSC_INDEX_CHECK) 1669 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1673 template <
class MS1,
class MS2>
friend MS1 &_msmsusetinf(MS1 &ms1,
const MS2 &ms2)
1674 #if(CXSC_INDEX_CHECK) 1675 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1679 template <
class MS1,
class MS2>
friend MS1 &_msmsusetsup(MS1 &ms1,
const MS2 &ms2)
1680 #if(CXSC_INDEX_CHECK) 1681 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1686 template <
class MS,
class V,
class E>
friend E _msvimult(
const MS &ms,
const V &v)
1687 #if(CXSC_INDEX_CHECK) 1688 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1692 template <
class V,
class MS,
class E>
friend E _vmsimult(
const V &v,
const MS &ms)
1693 #if(CXSC_INDEX_CHECK) 1694 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1698 template <
class V,
class MS,
class S>
friend V &_vmsimultassign(V &v,
const MS &ms)
1699 #if(CXSC_INDEX_CHECK) 1700 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1707 template <
class M,
class MS,
class E>
friend E _mmsimult(
const M &m1,
const MS &ms)
1708 #if(CXSC_INDEX_CHECK) 1709 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1713 template <
class MS,
class M,
class E>
friend E _msmimult(
const MS &ms,
const M &m2)
1714 #if(CXSC_INDEX_CHECK) 1715 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1720 template <
class M,
class MS,
class S>
friend M &_mmsimultassign(M &m1,
const MS &ms)
1721 #if(CXSC_INDEX_CHECK) 1722 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1727 template <
class MS1,
class MS2,
class E>
friend E _msmsimult(
const MS1 &ms1,
const MS2 &ms2)
1728 #if(CXSC_INDEX_CHECK) 1729 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1734 template <
class M,
class MS>
friend M &_mmsconvassign(M &m1,
const MS &ms)
1735 #if(CXSC_INDEX_CHECK) 1736 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1740 template <
class MS1,
class MS2>
friend MS1 &_msmsconvassign(MS1 &ms1,
const MS2 &ms2)
1741 #if(CXSC_INDEX_CHECK) 1742 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1746 template <
class M,
class MS,
class E>
friend E _mmssect(
const M &m,
const MS &ms)
1747 #if(CXSC_INDEX_CHECK) 1748 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1752 template <
class M,
class MS>
friend M &_mmssectassign(M &m1,
const MS &ms)
1753 #if(CXSC_INDEX_CHECK) 1754 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1758 template <
class MS1,
class MS2>
friend MS1 &_msmssectassign(MS1 &ms1,
const MS2 &ms2)
1759 #if(CXSC_INDEX_CHECK) 1760 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1764 template <
class MS1,
class MS2,
class E>
friend E _msmssect(
const MS1 &m1,
const MS2 &m2)
1765 #if(CXSC_INDEX_CHECK) 1766 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1773 template <
class MS1,
class MS2>
friend MS1 &_msmssetre(MS1 &ms1,
const MS2 &ms2)
1774 #if(CXSC_INDEX_CHECK) 1775 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1779 template <
class MS1,
class MS2>
friend MS1 &_msmssetim(MS1 &ms1,
const MS2 &ms2)
1780 #if(CXSC_INDEX_CHECK) 1781 throw(ERROR__OP_WITH_WRONG_DIM<MS1>);
1785 template <
class M1,
class MS2>
friend M1 &_mmssetre(M1 &m1,
const MS2 &ms2)
1786 #if(CXSC_INDEX_CHECK) 1787 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1791 template <
class M1,
class MS2>
friend M1 &_mmssetim(M1 &m1,
const MS2 &ms2)
1792 #if(CXSC_INDEX_CHECK) 1793 throw(ERROR__OP_WITH_WRONG_DIM<M1>);
1798 template <
class MS,
class V,
class E>
friend E _msvcmult(
const MS &ms,
const V &v)
1799 #if(CXSC_INDEX_CHECK) 1800 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1804 template <
class V,
class MS,
class E>
friend E _vmscmult(
const V &v,
const MS &ms)
1805 #if(CXSC_INDEX_CHECK) 1806 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1810 template <
class V,
class MS,
class S>
friend V &_vmscmultassign(V &v,
const MS &ms)
1811 #if(CXSC_INDEX_CHECK) 1812 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1819 template <
class M,
class MS,
class E>
friend E _mmscmult(
const M &m1,
const MS &ms)
1820 #if(CXSC_INDEX_CHECK) 1821 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1825 template <
class MS,
class M,
class E>
friend E _msmcmult(
const MS &ms,
const M &m2)
1826 #if(CXSC_INDEX_CHECK) 1827 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1832 template <
class M,
class MS,
class S>
friend M &_mmscmultassign(M &m1,
const MS &ms)
1833 #if(CXSC_INDEX_CHECK) 1834 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1838 template <
class MS1,
class MS2,
class E>
friend E _msmscmult(
const MS1 &ms1,
const MS2 &ms2)
1839 #if(CXSC_INDEX_CHECK) 1840 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1846 template <
class MS,
class V,
class E>
friend E _msvcimult(
const MS &ms,
const V &v)
1847 #if(CXSC_INDEX_CHECK) 1848 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1852 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
1853 #if(CXSC_INDEX_CHECK) 1854 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1858 template <
class V,
class MS,
class S>
friend V &_vmscimultassign(V &v,
const MS &ms)
1859 #if(CXSC_INDEX_CHECK) 1860 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1885 template <
class M,
class MS,
class E>
friend E _mmscimult(
const M &m1,
const MS &ms)
1886 #if(CXSC_INDEX_CHECK) 1887 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1891 template <
class MS,
class M,
class E>
friend E _msmcimult(
const MS &ms,
const M &m2)
1892 #if(CXSC_INDEX_CHECK) 1893 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1897 template <
class M,
class MS,
class S>
friend M &_mmscimultassign(M &m1,
const MS &ms)
1898 #if(CXSC_INDEX_CHECK) 1899 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1904 template <
class MS1,
class MS2,
class E>
friend E _msmscimult(
const MS1 &ms1,
const MS2 &ms2)
1905 #if(CXSC_INDEX_CHECK) 1906 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1912 template <
class MS,
class V,
class E>
friend E _msvlmult(
const MS &ms,
const V &v)
1913 #if(CXSC_INDEX_CHECK) 1914 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1918 template <
class V,
class MS,
class E>
friend E _vmslmult(
const V &v,
const MS &ms)
1919 #if(CXSC_INDEX_CHECK) 1920 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1924 template <
class V,
class MS,
class S>
friend V &_vmslmultassign(V &v,
const MS &ms)
1925 #if(CXSC_INDEX_CHECK) 1926 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1932 template <
class M,
class MS,
class E>
friend E _mmslmult(
const M &m1,
const MS &ms)
1933 #if(CXSC_INDEX_CHECK) 1934 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1938 template <
class MS,
class M,
class E>
friend E _msmlmult(
const MS &ms,
const M &m2)
1939 #if(CXSC_INDEX_CHECK) 1940 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1945 template <
class M,
class MS,
class S>
friend M &_mmslmultassign(M &m1,
const MS &ms)
1946 #if(CXSC_INDEX_CHECK) 1947 throw(ERROR__OP_WITH_WRONG_DIM<M>);
1951 template <
class MS1,
class MS2,
class E>
friend E _msmslmult(
const MS1 &ms1,
const MS2 &ms2)
1952 #if(CXSC_INDEX_CHECK) 1953 throw(ERROR__OP_WITH_WRONG_DIM<E>);
1959 template <
class MS,
class V,
class E>
friend E _msvlimult(
const MS &ms,
const V &v)
1960 #if(CXSC_INDEX_CHECK) 1961 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1965 template <
class V,
class MS,
class E>
friend E _vmslimult(
const V &v,
const MS &ms)
1966 #if(CXSC_INDEX_CHECK) 1967 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1971 template <
class V,
class MS,
class S>
friend V &_vmslimultassign(V &v,
const MS &ms)
1972 #if(CXSC_INDEX_CHECK) 1973 throw(ERROR__OP_WITH_WRONG_DIM<MS>);
1998 template <
class M,
class MS,
class E>
friend E _mmslimult(
const M &m1,
const MS &ms)
1999 #if(CXSC_INDEX_CHECK) 2000 throw(ERROR__OP_WITH_WRONG_DIM<E>);
2004 template <
class MS,
class M,
class E>
friend E _msmlimult(
const MS &ms,
const M &m2)
2005 #if(CXSC_INDEX_CHECK) 2006 throw(ERROR__OP_WITH_WRONG_DIM<E>);
2011 template <
class M,
class MS,
class S>
friend M &_mmslimultassign(M &m1,
const MS &ms)
2012 #if(CXSC_INDEX_CHECK) 2013 throw(ERROR__OP_WITH_WRONG_DIM<M>);
2018 template <
class MS1,
class MS2,
class E>
friend E _msmslimult(
const MS1 &ms1,
const MS2 &ms2)
2019 #if(CXSC_INDEX_CHECK) 2020 throw(ERROR__OP_WITH_WRONG_DIM<E>);
2032 explicit INLINE
rmatrix_slice(
rmatrix &a,
const int &l1,
const int &u1,
const int &l2,
const int &u2)
throw():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) { }
2034 explicit INLINE
rmatrix_slice(
rmatrix_slice &a,
const int &l1,
const int &u1,
const int &l2,
const int &u2)
throw():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) { }
2037 INLINE
rmatrix_slice(
const rmatrix_slice &ms)
throw():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) { }
2043 #if(CXSC_INDEX_CHECK) 2044 throw(ERROR_RMATRIX_TYPE_CAST_OF_THICK_OBJ);
2056 #if(CXSC_INDEX_CHECK) 2057 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2063 #if(CXSC_INDEX_CHECK) 2064 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2072 #if(CXSC_INDEX_CHECK) 2073 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2079 #if(CXSC_INDEX_CHECK) 2080 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2086 #if(CXSC_INDEX_CHECK) 2087 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2093 #if(CXSC_INDEX_CHECK) 2094 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
2100 #if(CXSC_INDEX_CHECK) 2101 throw(ERROR_RMATRIX_ROW_OR_COL_NOT_IN_MAT);
2109 #if(CXSC_INDEX_CHECK) 2110 throw(ERROR_RMATRIX_SUB_ARRAY_TOO_BIG);
2116 #if(CXSC_INDEX_CHECK) 2117 throw(ERROR_RMATRIX_SUB_ARRAY_TOO_BIG);
2129 #if(CXSC_INDEX_CHECK) 2130 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2136 #if(CXSC_INDEX_CHECK) 2137 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2149 #if(CXSC_INDEX_CHECK) 2150 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2156 #if(CXSC_INDEX_CHECK) 2157 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2169 #if(CXSC_INDEX_CHECK) 2170 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2176 #if(CXSC_INDEX_CHECK) 2177 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2185 INLINE
operator void*()
throw();
2196 INLINE rvector
operator /(
const rmatrix_subv &rv,
const real &s)
throw();
2198 INLINE rvector
operator *(
const rmatrix_subv &rv,
const real &s)
throw();
2200 INLINE rvector
operator *(
const real &s,
const rmatrix_subv &rv)
throw();
2202 INLINE rvector
abs(
const rmatrix_subv &mv)
throw();
2207 void accumulate(dotprecision &dp,
const rmatrix_subv & rv1,
const rmatrix_subv &rv2)
2208 #if(CXSC_INDEX_CHECK) 2209 throw(OP_WITH_WRONG_DIM);
2215 void accumulate_approx(dotprecision &dp,
const rmatrix_subv & rv1,
const rmatrix_subv &rv2);
2218 void accumulate(dotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2)
2219 #if(CXSC_INDEX_CHECK) 2220 throw(OP_WITH_WRONG_DIM);
2226 void accumulate_approx(dotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2);
2229 void accumulate(dotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2)
2230 #if(CXSC_INDEX_CHECK) 2231 throw(OP_WITH_WRONG_DIM);
2237 void accumulate_approx(dotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2);
2240 void accumulate(cdotprecision &dp,
const rmatrix_subv & rv1,
const rmatrix_subv &rv2)
2241 #if(CXSC_INDEX_CHECK) 2242 throw(OP_WITH_WRONG_DIM);
2248 void accumulate_approx(cdotprecision &dp,
const rmatrix_subv & rv1,
const rmatrix_subv &rv2);
2251 void accumulate(cdotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2)
2252 #if(CXSC_INDEX_CHECK) 2253 throw(OP_WITH_WRONG_DIM);
2259 void accumulate_approx(cdotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2);
2262 void accumulate(cdotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2)
2263 #if(CXSC_INDEX_CHECK) 2264 throw(OP_WITH_WRONG_DIM);
2270 void accumulate_approx(cdotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2);
2273 void accumulate(idotprecision &dp,
const rmatrix_subv & rv1,
const rmatrix_subv &rv2)
2274 #if(CXSC_INDEX_CHECK) 2275 throw(OP_WITH_WRONG_DIM);
2279 void accumulate(idotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2)
2281 #if(CXSC_INDEX_CHECK) 2282 throw(OP_WITH_WRONG_DIM);
2286 void accumulate(idotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2)
2288 #if(CXSC_INDEX_CHECK) 2289 throw(OP_WITH_WRONG_DIM);
2293 void accumulate(cidotprecision &dp,
const rmatrix_subv & rv1,
const rmatrix_subv &rv2)
2295 #if(CXSC_INDEX_CHECK) 2296 throw(OP_WITH_WRONG_DIM);
2300 void accumulate(cidotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2)
2302 #if(CXSC_INDEX_CHECK) 2303 throw(OP_WITH_WRONG_DIM);
2307 void accumulate(cidotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2)
2309 #if(CXSC_INDEX_CHECK) 2310 throw(OP_WITH_WRONG_DIM);
2314 void accumulate(dotprecision &dp,
const rvector_slice &sl,
const rmatrix_subv &sv)
2316 #if(CXSC_INDEX_CHECK) 2317 throw(OP_WITH_WRONG_DIM);
2323 void accumulate_approx(dotprecision &dp,
const rvector_slice &sl,
const rmatrix_subv &sv);
2327 void accumulate(cdotprecision &dp,
const rvector_slice & sl1,
const rmatrix_subv &rv2)
2328 #if(CXSC_INDEX_CHECK) 2329 throw(OP_WITH_WRONG_DIM);
2335 void accumulate_approx(cdotprecision &dp,
const rvector_slice & sl1,
const rmatrix_subv &rv2);
2338 void accumulate(idotprecision &dp,
const rvector_slice & sl1,
const rmatrix_subv &rv2)
2339 #if(CXSC_INDEX_CHECK) 2340 throw(OP_WITH_WRONG_DIM);
2346 void accumulate(cidotprecision &dp,
const rvector_slice & sl1,
const rmatrix_subv &rv2)
2347 #if(CXSC_INDEX_CHECK) 2348 throw(OP_WITH_WRONG_DIM);
2354 void accumulate(dotprecision &dp,
const rmatrix_subv &mv,
const rvector_slice &vs)
2355 #if(CXSC_INDEX_CHECK) 2356 throw(OP_WITH_WRONG_DIM);
2362 void accumulate_approx(dotprecision &dp,
const rmatrix_subv &mv,
const rvector_slice &vs);
2366 void accumulate(cdotprecision &dp,
const rmatrix_subv & rv1,
const rvector_slice &sl2)
2367 #if(CXSC_INDEX_CHECK) 2368 throw(OP_WITH_WRONG_DIM);
2374 void accumulate_approx(cdotprecision &dp,
const rmatrix_subv & rv1,
const rvector_slice &sl2);
2377 void accumulate(idotprecision &dp,
const rmatrix_subv & rv1,
const rvector_slice &sl2)
2378 #if(CXSC_INDEX_CHECK) 2379 throw(OP_WITH_WRONG_DIM);
2385 void accumulate(cidotprecision &dp,
const rmatrix_subv & rv1,
const rvector_slice &sl2)
2386 #if(CXSC_INDEX_CHECK) 2387 throw(OP_WITH_WRONG_DIM);
2393 INLINE real
operator *(
const rmatrix_subv & rv1,
const rmatrix_subv &rv2)
2394 #if(CXSC_INDEX_CHECK) 2395 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2399 INLINE real
operator *(
const rvector & rv1,
const rmatrix_subv &rv2)
2401 #if(CXSC_INDEX_CHECK) 2402 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2406 INLINE real
operator *(
const rmatrix_subv &rv1,
const rvector &rv2)
2408 #if(CXSC_INDEX_CHECK) 2409 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2413 INLINE real
operator *(
const rvector_slice &sl,
const rmatrix_subv &sv)
2415 #if(CXSC_INDEX_CHECK) 2416 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2420 INLINE real
operator *(
const rmatrix_subv &mv,
const rvector_slice &vs)
2422 #if(CXSC_INDEX_CHECK) 2423 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2429 INLINE rvector operator +(
const rmatrix_subv & rv1,
const rmatrix_subv &rv2)
2430 #if(CXSC_INDEX_CHECK) 2431 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2435 INLINE rvector operator +(
const rmatrix_subv &rv1,
const rvector &rv2)
2437 #if(CXSC_INDEX_CHECK) 2438 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2442 INLINE rvector operator +(
const rvector & rv1,
const rmatrix_subv &rv2)
2444 #if(CXSC_INDEX_CHECK) 2445 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2449 INLINE rvector operator +(
const rvector_slice &sl,
const rmatrix_subv &mv)
2451 #if(CXSC_INDEX_CHECK) 2452 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2456 INLINE rvector operator +(
const rmatrix_subv &mv,
const rvector_slice &sl)
2458 #if(CXSC_INDEX_CHECK) 2459 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2465 INLINE rvector operator -(
const rmatrix_subv & rv1,
const rmatrix_subv &rv2)
2466 #if(CXSC_INDEX_CHECK) 2467 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2471 INLINE rvector operator -(
const rvector & rv1,
const rmatrix_subv &rv2)
2473 #if(CXSC_INDEX_CHECK) 2474 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2478 INLINE rvector operator -(
const rmatrix_subv &rv1,
const rvector &rv2)
2480 #if(CXSC_INDEX_CHECK) 2481 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2485 INLINE rvector operator -(
const rvector_slice &sl,
const rmatrix_subv &mv)
2487 #if(CXSC_INDEX_CHECK) 2488 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2492 INLINE rvector operator -(
const rmatrix_subv &mv,
const rvector_slice &sl)
2494 #if(CXSC_INDEX_CHECK) 2495 throw(ERROR_RVECTOR_OP_WITH_WRONG_DIM);
2504 INLINE rmatrix
_rmatrix(
const rmatrix &rm)
throw();
2506 INLINE rmatrix
_rmatrix(
const rvector &v)
throw();
2508 INLINE rmatrix
_rmatrix(
const rvector_slice &v)
throw();
2510 INLINE rmatrix
_rmatrix(
const real &r)
throw();
2513 INLINE
int Lb(
const rmatrix &rm,
const int &i)
2514 #if(CXSC_INDEX_CHECK) 2515 throw(ERROR_RMATRIX_WRONG_ROW_OR_COL);
2519 INLINE
int Ub(
const rmatrix &rm,
const int &i)
2521 #if(CXSC_INDEX_CHECK) 2522 throw(ERROR_RMATRIX_WRONG_ROW_OR_COL);
2526 INLINE
int Lb(
const rmatrix_slice &rm,
const int &i)
2528 #if(CXSC_INDEX_CHECK) 2529 throw(ERROR_RMATRIX_WRONG_ROW_OR_COL);
2533 INLINE
int Ub(
const rmatrix_slice &rm,
const int &i)
2535 #if(CXSC_INDEX_CHECK) 2536 throw(ERROR_RMATRIX_WRONG_ROW_OR_COL);
2540 INLINE rmatrix &
SetLb(rmatrix &m,
const int &i,
const int &j)
2542 #if(CXSC_INDEX_CHECK) 2543 throw(ERROR_RMATRIX_WRONG_ROW_OR_COL);
2547 INLINE rmatrix &
SetUb(rmatrix &m,
const int &i,
const int &j)
2549 #if(CXSC_INDEX_CHECK) 2550 throw(ERROR_RMATRIX_WRONG_ROW_OR_COL);
2554 INLINE
void Resize(rmatrix &A)
throw();
2557 INLINE
void Resize(rmatrix &A,
const int &m,
const int &n)
2558 #if(CXSC_INDEX_CHECK) 2559 throw(ERROR_RMATRIX_WRONG_BOUNDARIES);
2563 INLINE
void Resize(rmatrix &A,
const int &m1,
const int &m2,
const int &n1,
const int &n2)
2565 #if(CXSC_INDEX_CHECK) 2566 throw(ERROR_RMATRIX_WRONG_BOUNDARIES);
2572 INLINE rmatrix
abs(
const rmatrix &m)
throw();
2574 INLINE rmatrix
abs(
const rmatrix_slice &ms)
throw();
2576 INLINE rmatrix
CompMat(
const rmatrix &m)
throw();
2581 INLINE rmatrix
operator *(
const real &c,
const rmatrix &m)
throw();
2583 INLINE rmatrix
operator *(
const real &c,
const rmatrix_slice &ms)
throw();
2585 INLINE rmatrix
operator *(
const rmatrix &m,
const real &c)
throw();
2587 INLINE rmatrix
operator *(
const rmatrix_slice &ms,
const real &c)
throw();
2589 INLINE rmatrix &
operator *=(rmatrix &m,
const real &c)
throw();
2591 INLINE rmatrix
operator /(
const rmatrix &m,
const real &c)
throw();
2593 INLINE rmatrix
operator /(
const rmatrix_slice &ms,
const real &c)
throw();
2595 INLINE rmatrix &
operator /=(rmatrix &m,
const real &c)
throw();
2602 INLINE rvector
operator *(
const rmatrix &m,
const rvector &v)
2603 #if(CXSC_INDEX_CHECK) 2604 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2608 INLINE rvector
operator *(
const rmatrix_slice &ms,
const rvector &v)
2610 #if(CXSC_INDEX_CHECK) 2611 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2615 INLINE rvector
operator *(
const rvector &v,
const rmatrix &m)
2617 #if(CXSC_INDEX_CHECK) 2618 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2622 INLINE rvector
operator *(
const rvector &v,
const rmatrix_slice &ms)
2624 #if(CXSC_INDEX_CHECK) 2625 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2629 INLINE rvector &
operator *=(rvector &v,
const rmatrix &m)
2631 #if(CXSC_INDEX_CHECK) 2632 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2636 INLINE rvector &
operator *=(rvector &v,
const rmatrix_slice &ms)
2638 #if(CXSC_INDEX_CHECK) 2639 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2646 INLINE rvector
operator *(
const rvector_slice &v,
const rmatrix &m)
2647 #if(CXSC_INDEX_CHECK) 2648 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2658 INLINE
const rmatrix &operator +(
const rmatrix &m1)
throw();
2660 INLINE rmatrix operator +(
const rmatrix_slice &ms)
throw();
2662 INLINE rmatrix operator +(
const rmatrix &m1,
const rmatrix &m2)
2663 #if(CXSC_INDEX_CHECK) 2664 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2668 INLINE rmatrix operator +(
const rmatrix &m,
const rmatrix_slice &ms)
2670 #if(CXSC_INDEX_CHECK) 2671 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2675 INLINE rmatrix operator +(
const rmatrix_slice &ms,
const rmatrix &m)
2677 #if(CXSC_INDEX_CHECK) 2678 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2682 INLINE rmatrix operator +(
const rmatrix_slice &m1,
const rmatrix_slice &m2)
2684 #if(CXSC_INDEX_CHECK) 2685 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2689 INLINE rmatrix &
operator +=(rmatrix &m1,
const rmatrix &m2)
2691 #if(CXSC_INDEX_CHECK) 2692 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2696 INLINE rmatrix &
operator +=(rmatrix &m1,
const rmatrix_slice &ms)
2698 #if(CXSC_INDEX_CHECK) 2699 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2705 INLINE rmatrix operator -(
const rmatrix &m)
throw();
2707 INLINE rmatrix operator -(
const rmatrix_slice &ms)
throw();
2709 INLINE rmatrix operator -(
const rmatrix &m1,
const rmatrix &m2)
2710 #if(CXSC_INDEX_CHECK) 2711 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2715 INLINE rmatrix operator -(
const rmatrix &m,
const rmatrix_slice &ms)
2717 #if(CXSC_INDEX_CHECK) 2718 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2722 INLINE rmatrix operator -(
const rmatrix_slice &ms,
const rmatrix &m)
2724 #if(CXSC_INDEX_CHECK) 2725 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2729 INLINE rmatrix operator -(
const rmatrix_slice &ms1,
const rmatrix_slice &ms2)
2731 #if(CXSC_INDEX_CHECK) 2732 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2736 INLINE rmatrix &operator -=(rmatrix &m1,
const rmatrix &m2)
2738 #if(CXSC_INDEX_CHECK) 2739 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2743 INLINE rmatrix &operator -=(rmatrix &m1,
const rmatrix_slice &ms)
2745 #if(CXSC_INDEX_CHECK) 2746 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2752 INLINE rmatrix
operator *(
const rmatrix &m1,
const rmatrix &m2)
2753 #if(CXSC_INDEX_CHECK) 2754 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2758 INLINE rmatrix
operator *(
const rmatrix &m1,
const rmatrix_slice &ms)
2760 #if(CXSC_INDEX_CHECK) 2761 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2765 INLINE rmatrix
operator *(
const rmatrix_slice &ms,
const rmatrix &m1)
2767 #if(CXSC_INDEX_CHECK) 2768 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2772 INLINE rmatrix
operator *(
const rmatrix_slice &ms1,
const rmatrix_slice &ms2)
2774 #if(CXSC_INDEX_CHECK) 2775 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2779 INLINE rmatrix &
operator *=(rmatrix &m1,
const rmatrix &m2)
2781 #if(CXSC_INDEX_CHECK) 2782 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2786 INLINE rmatrix &
operator *=(rmatrix &m1,
const rmatrix_slice &ms)
2788 #if(CXSC_INDEX_CHECK) 2789 throw(ERROR_RMATRIX_OP_WITH_WRONG_DIM);
2801 INLINE
bool operator ==(
const rmatrix &m1,
const rmatrix &m2)
throw();
2803 INLINE
bool operator !=(
const rmatrix &m1,
const rmatrix &m2)
throw();
2805 INLINE
bool operator <(
const rmatrix &m1,
const rmatrix &m2)
throw();
2807 INLINE
bool operator <=(
const rmatrix &m1,
const rmatrix &m2)
throw();
2809 INLINE
bool operator >(
const rmatrix &m1,
const rmatrix &m2)
throw();
2811 INLINE
bool operator >=(
const rmatrix &m1,
const rmatrix &m2)
throw();
2813 INLINE
bool operator ==(
const rmatrix &m1,
const rmatrix_slice &ms)
throw();
2815 INLINE
bool operator !=(
const rmatrix &m1,
const rmatrix_slice &ms)
throw();
2817 INLINE
bool operator <(
const rmatrix &m1,
const rmatrix_slice &ms)
throw();
2819 INLINE
bool operator <=(
const rmatrix &m1,
const rmatrix_slice &ms)
throw();
2821 INLINE
bool operator >(
const rmatrix &m1,
const rmatrix_slice &ms)
throw();
2823 INLINE
bool operator >=(
const rmatrix &m1,
const rmatrix_slice &ms)
throw();
2828 INLINE
bool operator ==(
const rmatrix_slice &m1,
const rmatrix_slice &m2)
throw();
2830 INLINE
bool operator !=(
const rmatrix_slice &m1,
const rmatrix_slice &m2)
throw();
2832 INLINE
bool operator <(
const rmatrix_slice &m1,
const rmatrix_slice &m2)
throw();
2834 INLINE
bool operator <=(
const rmatrix_slice &m1,
const rmatrix_slice &m2)
throw();
2836 INLINE
bool operator >(
const rmatrix_slice &m1,
const rmatrix_slice &m2)
throw();
2838 INLINE
bool operator >=(
const rmatrix_slice &m1,
const rmatrix_slice &m2)
throw();
2843 INLINE
bool operator !(
const rmatrix &ms)
throw();
2845 INLINE
bool operator !(
const rmatrix_slice &ms)
throw();
2850 INLINE std::ostream &operator <<(std::ostream &s,
const rmatrix &r)
throw();
2852 INLINE std::ostream &operator <<(std::ostream &s,
const rmatrix_slice &r)
throw();
2854 INLINE std::istream &operator >>(std::istream &s,rmatrix &r)
throw();
2856 INLINE std::istream &operator >>(std::istream &s,rmatrix_slice &r)
throw();
2861 INLINE
int RowLen (
const rmatrix& );
2863 INLINE
int ColLen (
const rmatrix& );
2865 INLINE
int RowLen (
const rmatrix_slice& );
2867 INLINE
int ColLen (
const rmatrix_slice& );
2869 rmatrix
Id (
const rmatrix& );
2871 rmatrix
transp (
const rmatrix& );
2879 #ifdef _CXSC_INCL_INL 2880 # include "matrix.inl" 2881 # include "rmatrix.inl" 2884 #ifdef _CXSC_IVECTOR_HPP_INCLUDED 2885 # ifdef _CXSC_INCL_INL 2886 # include "ivecrmat.inl" 2888 # include "ivecrmat.hpp" 2892 #ifdef _CXSC_CVECTOR_HPP_INCLUDED 2893 # ifdef _CXSC_INCL_INL 2894 # include "cvecrmat.inl" 2896 # include "cvecrmat.hpp" 2900 #ifdef _CXSC_CIVECTOR_HPP_INCLUDED 2901 # ifdef _CXSC_INCL_INL 2902 # include "civecrmat.inl" 2904 # include "civecrmat.hpp" 2908 #ifdef _CXSC_LIVECTOR_HPP_INCLUDED 2909 # ifdef _CXSC_INCL_INL 2910 # include "livecrmat.inl" 2912 # include "livecrmat.hpp" 2916 #ifdef _CXSC_LRVECTOR_HPP_INCLUDED 2917 # ifdef _CXSC_INCL_INL 2918 # include "lrvecrmat.inl" 2920 # include "lrvecrmat.hpp" 2924 #ifdef CXSC_USE_BLAS 2925 #define _CXSC_BLAS_RMATRIX 2926 #include "cxsc_blas.inl" rmatrix_subv & operator=(const rmatrix_subv &rv)
Implementation of standard assigning operator.
rmatrix & operator-=(const srmatrix &m)
Implementation of substraction and allocation operation.
rmatrix_slice & operator/=(const real &c)
Implementation of division and allocation operation.
friend int Lb(const rmatrix_subv &rv)
Returns the lower bound of the vector.
The Data Type rmatrix_slice.
cimatrix & operator/=(cimatrix &m, const cinterval &c)
Implementation of division and allocation operation.
friend int VecLen(const rmatrix_subv &rv)
Returns the size of the vector.
The Data Type cimatrix_slice.
int Lb(const cimatrix &rm, const int &i)
Returns the lower bound index.
The namespace cxsc, providing all functionality of the class library C-XSC.
civector operator*(const cimatrix_subv &rv, const cinterval &s)
Implementation of multiplication operation.
rmatrix _rmatrix(const rmatrix &rm)
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC...
cimatrix_subv Col(cimatrix &m, const int &i)
Returns one column of the matrix as a vector.
cimatrix & SetLb(cimatrix &m, const int &i, const int &j)
Sets the lower bound index.
rmatrix & operator()()
Operator for accessing the whole matrix.
rmatrix_subv(const rmatrix_subv &v)
Constructor of class rmatrix_subv.
rmatrix_slice(rmatrix &a, const int &l1, const int &u1, const int &l2, const int &u2)
Constructor of class rmatrix_slice.
void accumulate_approx(cdotprecision &dp, const cmatrix_subv &rv1, const cmatrix_subv &rv2)
The accurate scalar product of the last two arguments added to the value of the first argument (witho...
The Multiple-Precision Data Type l_ivector.
void DoubleSize(cimatrix &A)
Doubles the size of the matrix.
rmatrix & operator+=(const srmatrix &m)
Implementation of addition and allocation operation.
rmatrix_slice & operator*=(const srmatrix &m)
Implementation of multiplication and allocation operation.
rmatrix_subv & operator/=(const real &c)
Implementation of division and allocation operation.
cimatrix Id(const cimatrix &A)
Returns the Identity matrix.
The Data Type rvector_slice.
The Multiple-Precision Data Type l_imatrix.
cimatrix & SetUb(cimatrix &m, const int &i, const int &j)
Sets the upper bound index.
The Data Type rmatrix_subv.
The Multiple-Precision Data Type l_rmatrix.
friend rmatrix SupRe(const cimatrix &v)
Returns componentwise the supremum of the real part.
rmatrix_subv operator[](const int &i) const
Operator for accessing a single row of the matrix.
A slice of a sparse real matrix.
rmatrix_slice & operator+=(const srmatrix &m)
Implementation of multiplication and allocation operation.
void Resize(cimatrix &A)
Resizes the matrix.
rmatrix_subv & operator-=(const real &c)
Implementation of subtraction and allocation operation.
rmatrix_slice & operator-=(const srmatrix &m)
Implementation of multiplication and allocation operation.
Represents a row or column vector of a sparse matrix.
int ColLen(const cimatrix &)
Returns the column dimension.
friend rmatrix SupIm(const cimatrix &v)
Returns componentwise the supremum of the imaginary part.
rmatrix_subv & operator+=(const real &c)
Implementation of addition and allocation operation.
rmatrix_slice & operator=(const srmatrix &m)
Implementation of standard assigning operator.
rmatrix_subv & operator()()
Operator for accessing the whole vector.
cimatrix_subv Row(cimatrix &m, const int &i)
Returns one row of the matrix as a vector.
real & operator[](const int &i) const
Operator for accessing the single elements of the vector (read-only)
int RowLen(const cimatrix &)
Returns the row dimension.
rmatrix & operator*=(const srmatrix &m)
Implementation of multiplication and allocation operation.
friend rmatrix_subv Row(rmatrix &m, const int &i)
Returns one row of the matrix as a vector.
rmatrix CompMat(const cimatrix &A)
Returns Ostrowski's comparison matrix.
real(void)
Constructor of class real.
The Multiple-Precision Data Type l_rvector.
cdotprecision & operator+=(cdotprecision &cd, const l_complex &lc)
Implementation of standard algebraic addition and allocation operation.
friend rmatrix InfIm(const cimatrix &v)
Returns componentwise the infimum of the imaginary part.
rmatrix_slice & operator()()
Operator for accessing the whole matrix.
rmatrix_subv operator[](const int &i) const
Operator for accessing a single row of the matrix.
rmatrix_subv & operator*=(const real &c)
Implementation of multiplication and allocation operation.
rvector()
Constructor of class rvector.
friend rmatrix_subv Col(rmatrix &m, const int &i)
Returns one column of the matrix as a vector.
rmatrix_subv(real *d, const int &l, const int &u, const int &s, const int &st, const int &o)
Constructor of class rmatrix_subv.
Helper class for slices of sparse vectors.
rmatrix_slice(rmatrix_slice &a, const int &l1, const int &u1, const int &l2, const int &u2)
Constructor of class rmatrix_slice.
friend rmatrix InfRe(const cimatrix &v)
Returns componentwise the infimum of the real part.
rmatrix_slice(const rmatrix_slice &ms)
Constructor of class rmatrix_slice.
int Ub(const cimatrix &rm, const int &i)
Returns the upper bound index.
rmatrix()
Constructor of class rmatrix.
rmatrix & operator=(const real &r)
Implementation of standard assigning operator.
civector operator/(const cimatrix_subv &rv, const cinterval &s)
Implementation of division operation.
cimatrix transp(const cimatrix &A)
Returns the transposed matrix.
cimatrix & operator*=(cimatrix &m, const cinterval &c)
Implementation of multiplication and allocation operation.
friend int Ub(const rmatrix_subv &rv)
Returns the upper bound of the vector.
ivector abs(const cimatrix_subv &mv)
Returns the absolute value of the matrix.