26#ifndef _CXSC_RVECTOR_HPP_INCLUDED
27#define _CXSC_RVECTOR_HPP_INCLUDED
29#include "xscclass.hpp"
76#ifdef _CXSC_FRIEND_TPL
77template <
class V,
class MS,
class S>
friend void _vmsconstr(V &v,
const MS &m)
83template <
class V,
class M,
class S>
friend void _vmconstr(V &v,
const M &m)
89 template <
class V>
friend void _vresize(V &rv)
noexcept;
90 template <
class V,
class S>
friend void _vresize(V &rv,
const int &len)
96 template <
class V,
class S>
friend void _vresize(V &rv,
const int &lb,
const int &ub)
102 template <
class V1,
class V2,
class S>
friend V1 &_vvassign(V1 &rv1,
const V2 &rv2)
noexcept;
103 template <
class V,
class S>
friend V & _vsassign(V &rv,
const S &r)
noexcept;
104 template <
class V,
class VS,
class S>
friend V & _vvsassign(V &rv,
const VS &sl)
noexcept;
105 template <
class VS,
class V>
friend VS & _vsvassign(VS &sl,
const V &rv)
111template <
class V,
class M,
class S>
friend V &_vmassign(V &v,
const M &m)
117template <
class M,
class V,
class S>
friend M &_mvassign(M &m,
const V &v)
noexcept;
118template <
class MV,
class V>
friend MV &_mvvassign(MV &v,
const V &rv)
124template <
class MV,
class V>
friend V _mvabs(
const MV &mv)
noexcept;
127 template <
class DP,
class V1,
class V2>
friend void _vvaccu(DP &dp,
const V1 & rv1,
const V2 &rv2)
133 template <
class DP,
class VS,
class V>
friend void _vsvaccu(DP &dp,
const VS & sl,
const V &rv)
141 template <
class V1,
class V2,
class E>
friend E _vvmult(
const V1 & rv1,
const V2 &rv2)
147 template <
class VS,
class V,
class E>
friend E _vsvmult(
const VS & sl,
const V &rv)
153 template <
class V,
class S>
friend V &_vsmultassign(V &rv,
const S &r)
noexcept;
154 template <
class VS,
class S>
friend VS &_vssmultassign(VS &rv,
const S &r)
noexcept;
155 template <
class VS,
class S>
friend VS &_vssdivassign(VS &rv,
const S &r)
noexcept;
156 template <
class V1,
class V2,
class E>
friend E _vvplus(
const V1 &rv1,
const V2 &rv2)
162 template <
class V,
class VS,
class E>
friend E _vvsplus(
const V &rv,
const VS &sl)
168 template <
class VS1,
class VS2,
class E>
friend E _vsvsplus(
const VS1 &s1,
const VS2 &s2)
174 template <
class VS1,
class VS2,
class E>
friend E _vsvsminus(
const VS1 &s1,
const VS2 &s2)
180 template <
class V1,
class V2>
friend V1 &_vvplusassign(V1 &rv1,
const V2 &rv2)
186 template <
class V,
class VS>
friend V &_vvsplusassign(V &rv,
const VS &sl)
192 template <
class VS,
class V>
friend VS &_vsvplusassign(VS &sl,
const V &rv)
198 template <
class VS1,
class VS2>
friend VS1 &_vsvsplusassign(VS1 &sl1,
const VS2 &sl2)
204 template <
class VS1,
class VS2>
friend VS1 &_vsvsminusassign(VS1 &sl1,
const VS2 &sl2)
210 template <
class V1,
class V2>
friend V1 &_vvminusassign(V1 &rv1,
const V2 &rv2)
216 template <
class V,
class VS>
friend V &_vvsminusassign(V &rv,
const VS &sl)
222 template <
class VS,
class V>
friend VS &_vsvminusassign(VS &sl,
const V &rv)
228 template <
class V>
friend V _vminus(
const V &rv)
noexcept;
229 template <
class VS,
class V>
friend V _vsminus(
const VS &sl)
noexcept;
230 template <
class V1,
class V2,
class E>
friend E _vvminus(
const V1 &rv1,
const V2 &rv2)
236 template <
class V,
class VS,
class E>
friend E _vvsminus(
const V &rv,
const VS &sl)
242 template <
class VS,
class V,
class E>
friend E _vsvminus(
const VS &sl,
const V &rv)
248 template <
class MV1,
class MV2,
class E>
friend E _mvmvconv(
const MV1 &rv1,
const MV2 &rv2)
254 template <
class MV,
class V,
class E>
friend E _mvvconv(
const MV &rv1,
const V &rv2)
260template <
class V,
class MV>
friend V &_vmvconvassign(V &rv,
const MV &v)
267 template <
class M,
class V,
class E>
friend E _mvmult(
const M &m,
const V &v)
273 template <
class M,
class V,
class E>
friend E _mvimult(
const M &m,
const V &v)
279 template <
class M,
class V,
class E>
friend E _mvcmult(
const M &m,
const V &v)
285 template <
class M,
class V,
class E>
friend E _mvcimult(
const M &m,
const V &v)
291 template <
class V,
class M,
class E>
friend E _vmmult(
const V &v,
const M &m)
297 template <
class V,
class M,
class E>
friend E _vmimult(
const V &v,
const M &m)
303 template <
class V,
class M,
class E>
friend E _vmcmult(
const V &v,
const M &m)
309 template <
class V,
class M,
class E>
friend E _vmcimult(
const V &v,
const M &m)
315 template <
class V,
class M,
class S>
friend V &_vmmultassign(V &v,
const M &m)
321 template <
class V,
class M,
class S>
friend V &_vmimultassign(V &v,
const M &m)
327 template <
class V,
class M,
class S>
friend V &_vmcmultassign(V &v,
const M &m)
333 template <
class V,
class M,
class S>
friend V &_vmcimultassign(V &v,
const M &m)
339 template <
class MS,
class V,
class E>
friend E _msvmult(
const MS &ms,
const V &v)
345 template <
class MS,
class V,
class E>
friend E _msvimult(
const MS &ms,
const V &v)
351 template <
class MS,
class V,
class E>
friend E _msvcmult(
const MS &ms,
const V &v)
357 template <
class MS,
class V,
class E>
friend E _msvcimult(
const MS &ms,
const V &v)
363 template <
class V,
class MS,
class E>
friend E _vmsmult(
const V &v,
const MS &ms)
369 template <
class V,
class MS,
class E>
friend E _vmsimult(
const V &v,
const MS &ms)
375 template <
class V,
class MS,
class E>
friend E _vmscmult(
const V &v,
const MS &ms)
381 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
387 template <
class V,
class MS,
class S>
friend V &_vmsmultassign(V &v,
const MS &ms)
393 template <
class V,
class MS,
class S>
friend V &_vmsimultassign(V &v,
const MS &ms)
399 template <
class V,
class MS,
class S>
friend V &_vmscmultassign(V &v,
const MS &ms)
405 template <
class V,
class MS,
class S>
friend V &_vmscimultassign(V &v,
const MS &ms)
411 template <
class V,
class MV,
class S>
friend S _vmvmult(
const V &rv1,
const MV &rv2)
417 template <
class V,
class MV,
class S>
friend S _vmvimult(
const V &rv1,
const MV &rv2)
423 template <
class V,
class MV,
class S>
friend S _vmvcmult(
const V &rv1,
const MV &rv2)
429 template <
class V,
class MV,
class S>
friend S _vmvcimult(
const V &rv1,
const MV &rv2)
435 template <
class MV,
class S,
class E>
friend E _mvsmult(
const MV &rv,
const S &s)
noexcept;
436 template <
class MV1,
class MV2,
class E>
friend E _mvmvplus(
const MV1 &rv1,
const MV2 &rv2)
442 template <
class MV,
class V,
class E>
friend E _mvvplus(
const MV &rv1,
const V &rv2)
448 template <
class MV,
class V,
class E>
friend E _mvvminus(
const MV &rv1,
const V &rv2)
454 template <
class V,
class MV,
class E>
friend E _vmvminus(
const V &rv1,
const MV &rv2)
460 template <
class MV1,
class MV2,
class E>
friend E _mvmvminus(
const MV1 &rv1,
const MV2 &rv2)
466template <
class MV,
class V>
friend MV &_mvvplusassign(MV &v,
const V &rv)
472template <
class MV,
class V>
friend MV &_mvvminusassign(MV &v,
const V &rv)
479 template <
class V1,
class V2,
class E>
friend E _vvconv(
const V1 &rv1,
const V2 &rv2)
485 template <
class V,
class VS,
class E>
friend E _vvsconv(
const V &rv,
const VS &sl)
492template <
class DP,
class V,
class SV>
friend void _vmvaccu(DP &dp,
const V & rv1,
const SV &rv2)
500 template <
class V,
class S>
friend V &_vsdivassign(V &rv,
const S &r)
noexcept;
501 template <
class VS,
class S,
class E>
friend E _vssdiv(
const VS &sl,
const S &s)
noexcept;
502 template <
class V,
class S,
class E>
friend E _vsmult(
const V &rv,
const S &s)
noexcept;
503 template <
class VS,
class S,
class E>
friend E _vssmult(
const VS &sl,
const S &s)
noexcept;
504 template <
class V1,
class V2>
friend bool _vveq(
const V1 &rv1,
const V2 &rv2)
noexcept;
505 template <
class VS,
class V>
friend bool _vsveq(
const VS &sl,
const V &rv)
noexcept;
506 template <
class V1,
class V2>
friend bool _vvneq(
const V1 &rv1,
const V2 &rv2)
noexcept;
507 template <
class VS,
class V>
friend bool _vsvneq(
const VS &sl,
const V &rv)
noexcept;
508 template <
class V1,
class V2>
friend bool _vvless(
const V1 &rv1,
const V2 &rv2)
noexcept;
509 template <
class VS,
class V>
friend bool _vsvless(
const VS &sl,
const V &rv)
noexcept;
510 template <
class V1,
class V2>
friend bool _vvleq(
const V1 &rv1,
const V2 &rv2)
noexcept;
511 template <
class VS,
class V>
friend bool _vsvleq(
const VS &sl,
const V &rv)
noexcept;
512 template <
class V,
class VS>
friend bool _vvsless(
const V &rv,
const VS &sl)
noexcept;
513 template <
class V,
class VS>
friend bool _vvsleq(
const V &rv,
const VS &sl)
noexcept;
514 template <
class V>
friend bool _vnot(
const V &rv)
noexcept;
515 template <
class V>
friend void *_vvoid(
const V &rv)
noexcept;
516 template <
class V,
class E>
friend E _vabs(
const V &rv)
noexcept;
517 template <
class VS,
class E>
friend E _vsabs(
const VS &sl)
noexcept;
518 template <
class VS1,
class VS2>
friend bool _vsvseq(
const VS1 &sl1,
const VS2 &sl2)
noexcept;
519 template <
class VS1,
class VS2>
friend bool _vsvsneq(
const VS1 &sl1,
const VS2 &sl2)
noexcept;
520 template <
class VS1,
class VS2>
friend bool _vsvsless(
const VS1 &sl1,
const VS2 &sl2)
noexcept;
521 template <
class VS1,
class VS2>
friend bool _vsvsleq(
const VS1 &sl1,
const VS2 &sl2)
noexcept;
522 template <
class VS>
friend bool _vsnot(
const VS &sl)
noexcept;
523 template <
class VS>
friend void *_vsvoid(
const VS &sl)
noexcept;
524 template <
class V>
friend std::ostream &_vout(std::ostream &s,
const V &rv)
noexcept;
525 template <
class V>
friend std::istream &_vin(std::istream &s, V &rv)
noexcept;
527template <
class V,
class MV2,
class S>
friend V &_vmvassign(V &v,
const MV2 &rv)
noexcept;
528 template <
class MV,
class S,
class E>
friend E _mvsdiv(
const MV &rv,
const S &s)
noexcept;
532template <
class MV,
class V>
friend MV &_mvvconvassign(MV &v,
const V &rv)
538template <
class MV,
class V>
friend MV &_mvvsectassign(MV &v,
const V &rv)
546 template <
class V1,
class V2>
friend V1 &_vvsetinf(V1 &rv1,
const V2 &rv2)
552 template <
class V1,
class V2>
friend V1 &_vvusetinf(V1 &rv1,
const V2 &rv2)
558 template <
class V1,
class V2>
friend V1 &_vvsetsup(V1 &rv1,
const V2 &rv2)
564 template <
class V1,
class V2>
friend V1 &_vvusetsup(V1 &rv1,
const V2 &rv2)
570 template <
class VS,
class V>
friend VS &_vsvsetinf(VS &sl,
const V &rv)
576 template <
class VS,
class V>
friend VS &_vsvusetinf(VS &sl,
const V &rv)
582 template <
class VS,
class V>
friend VS &_vsvsetsup(VS &sl,
const V &rv)
588 template <
class VS,
class V>
friend VS &_vsvusetsup(VS &sl,
const V &rv)
594template <
class MV,
class V>
friend MV &_mvvsetinf(MV &v,
const V &rv)
600template <
class MV,
class V>
friend MV &_mvvusetinf(MV &v,
const V &rv)
606template <
class MV,
class V>
friend MV &_mvvsetsup(MV &v,
const V &rv)
612template <
class MV,
class V>
friend MV &_mvvusetsup(MV &v,
const V &rv)
618 template <
class V,
class E>
friend E _vdiam(
const V &rv)
noexcept;
619 template <
class V,
class E>
friend E _vmid(
const V &rv)
noexcept;
620 template <
class V,
class E>
friend E _vinf(
const V &rv)
noexcept;
621 template <
class V,
class E>
friend E _vsup(
const V &rv)
noexcept;
622 template <
class VS,
class E>
friend E _vsdiam(
const VS &sl)
noexcept;
623 template <
class VS,
class E>
friend E _vsmid(
const VS &sl)
noexcept;
624 template <
class VS,
class E>
friend E _vsinf(
const VS &sl)
noexcept;
625 template <
class VS,
class E>
friend E _vssup(
const VS &sl)
noexcept;
626template <
class MV,
class V>
friend V _mvdiam(
const MV &mv)
noexcept;
627template <
class MV,
class V>
friend V _mvmid(
const MV &mv)
noexcept;
628template <
class MV,
class V>
friend V _mvinf(
const MV &mv)
noexcept;
629template <
class MV,
class V>
friend V _mvsup(
const MV &mv)
noexcept;
632 template <
class V1,
class V2,
class E>
friend E _vvimult(
const V1 & rv1,
const V2 &rv2)
638 template <
class VS,
class V,
class E>
friend E _vsvimult(
const VS & sl,
const V &rv)
645 template <
class V1,
class V2>
friend V1 &_vvconvassign(V1 &rv1,
const V2 &rv2)
651 template <
class V1,
class V2,
class E>
friend E _vvsect(
const V1 &rv1,
const V2 &rv2)
657 template <
class V,
class VS,
class E>
friend E _vvssect(
const V &rv,
const VS &sl)
663 template <
class V1,
class V2>
friend V1 &_vvsectassign(V1 &rv1,
const V2 &rv2)
670 template <
class VS1,
class VS2,
class E>
friend E _vsvsconv(
const VS1 &s1,
const VS2 &s2)
677 template <
class V,
class VS>
friend V &_vvsconvassign(V &rv,
const VS &sl)
683 template <
class VS,
class V>
friend VS &_vsvconvassign(VS &sl,
const V &rv)
689 template <
class VS1,
class VS2>
friend VS1 &_vsvsconvassign(VS1 &sl1,
const VS2 &sl2)
696 template <
class VS,
class V>
friend VS &_vsvsectassign(VS &sl,
const V &rv)
704 template <
class V,
class S,
class E>
friend E _vsdiv(
const V &rv,
const S &s)
noexcept;
709 template <
class V,
class E>
friend E _vim(
const V &rv)
noexcept;
710 template <
class V,
class E>
friend E _vre(
const V &rv)
noexcept;
711template <
class MV,
class V>
friend V _mvim(
const MV &mv)
noexcept;
712template <
class MV,
class V>
friend V _mvre(
const MV &mv)
noexcept;
713template <
class MV,
class V>
friend MV &_mvvsetim(MV &v,
const V &rv)
719template <
class MV,
class V>
friend MV &_mvvsetre(MV &v,
const V &rv)
725 template <
class V1,
class V2>
friend V1 &_vvsetim(V1 &rv1,
const V2 &rv2)
731 template <
class V1,
class V2>
friend V1 &_vvsetre(V1 &rv1,
const V2 &rv2)
737 template <
class VS,
class E>
friend E _vsim(
const VS &sl)
noexcept;
738 template <
class VS,
class E>
friend E _vsre(
const VS &sl)
noexcept;
739 template <
class VS,
class V>
friend VS &_vsvsetim(VS &sl,
const V &rv)
745 template <
class VS,
class V>
friend VS &_vsvsetre(VS &sl,
const V &rv)
753 template <
class V1,
class V2,
class E>
friend E _vvcmult(
const V1 & rv1,
const V2 &rv2)
759 template <
class VS,
class V,
class E>
friend E _vsvcmult(
const VS & sl,
const V &rv)
791 template <
class V1,
class V2,
class E>
friend E _vvcimult(
const V1 & rv1,
const V2 &rv2)
797 template <
class VS,
class V,
class E>
friend E _vsvcimult(
const VS & sl,
const V &rv)
804 template <
class VS1,
class VS2,
class E>
friend E _vsvscimult(
const VS1 & sl1,
const VS2 &sl2)
815 template <
class V,
class MS,
class E>
friend E _vmslmult(
const V &v,
const MS &ms)
821 template <
class M,
class V,
class E>
friend E _mvlmult(
const M &m,
const V &v)
827 template <
class MS,
class V,
class E>
friend E _msvlmult(
const MS &ms,
const V &v)
834 template <
class V,
class M,
class E>
friend E _vmlmult(
const V &v,
const M &m)
842 template <
class V1,
class V2,
class E>
friend E _vvlmult(
const V1 & rv1,
const V2 &rv2)
848 template <
class VS,
class V,
class E>
friend E _vsvlmult(
const VS & sl,
const V &rv)
857 template <
class V1,
class V2,
class E>
friend E _vvlimult(
const V1 & rv1,
const V2 &rv2)
863 template <
class VS,
class V,
class E>
friend E _vsvlimult(
const VS & sl,
const V &rv)
870 template <
class VS1,
class VS2,
class E>
friend E _vsvslimult(
const VS1 & sl1,
const VS2 &sl2)
878 template <
class M,
class V,
class E>
friend E _mvlimult(
const M &m,
const V &v)
884 template <
class MS,
class V,
class E>
friend E _msvlimult(
const MS &ms,
const V &v)
890 template <
class V,
class M,
class E>
friend E _vmlimult(
const V &v,
const M &m)
896 template <
class V,
class MS,
class E>
friend E _vmslimult(
const V &v,
const MS &ms)
909 double* to_blas_array()
const {
return (
double*)dat; }
914 explicit INLINE
rvector(
const int &i)
noexcept;
917 explicit INLINE
rvector(
const class index &i)
noexcept;
920 explicit INLINE
rvector(
const int &i1,
const int &i2)
990 INLINE
~rvector() {
delete [] dat; }
1001 friend INLINE
int Lb(
const rvector &rv)
noexcept {
return rv.l; }
1003 friend INLINE
int Ub(
const rvector &rv)
noexcept {
return rv.u; }
1012#if(CXSC_INDEX_CHECK)
1020#if(CXSC_INDEX_CHECK)
1030#if(CXSC_INDEX_CHECK)
1037#if(CXSC_INDEX_CHECK)
1052 INLINE
operator void*()
noexcept;
1085#ifdef _CXSC_FRIEND_TPL
1087 template <
class VS1,
class VS2>
friend VS1 & _vsvsassign(VS1 &sl1,
const VS2 &sl2)
1088#if(CXSC_INDEX_CHECK)
1093 template <
class V,
class VS,
class S>
friend V & _vvsassign(V &rv,
const VS &sl)
noexcept;
1094 template <
class VS,
class V>
friend VS & _vsvassign(VS &sl,
const V &rv)
1095#if(CXSC_INDEX_CHECK)
1100 template <
class VS,
class S>
friend VS & _vssassign(VS &sl,
const S &r)
noexcept;
1101 template <
class VS,
class M,
class S>
friend VS &_vsmmultassign(VS &v,
const M &m)
1102#if(CXSC_INDEX_CHECK)
1108 template <
class VS,
class S>
friend VS &_vssmultassign(VS &rv,
const S &r)
noexcept;
1109 template <
class VS,
class S>
friend VS &_vssdivassign(VS &rv,
const S &r)
noexcept;
1111 template <
class VS,
class V>
friend bool _vsveq(
const VS &sl,
const V &rv)
noexcept;
1112 template <
class VS,
class V>
friend bool _vsvneq(
const VS &sl,
const V &rv)
noexcept;
1113 template <
class VS,
class V>
friend bool _vsvless(
const VS &sl,
const V &rv)
noexcept;
1114 template <
class VS,
class V>
friend bool _vsvleq(
const VS &sl,
const V &rv)
noexcept;
1115 template <
class V,
class VS>
friend bool _vvsless(
const V &rv,
const VS &sl)
noexcept;
1116 template <
class V,
class VS>
friend bool _vvsleq(
const V &rv,
const VS &sl)
noexcept;
1117 template <
class VS,
class E>
friend E _vsabs(
const VS &sl)
noexcept;
1118 template <
class VS1,
class VS2>
friend bool _vsvseq(
const VS1 &sl1,
const VS2 &sl2)
noexcept;
1119 template <
class VS1,
class VS2>
friend bool _vsvsneq(
const VS1 &sl1,
const VS2 &sl2)
noexcept;
1120 template <
class VS1,
class VS2>
friend bool _vsvsless(
const VS1 &sl1,
const VS2 &sl2)
noexcept;
1121 template <
class VS1,
class VS2>
friend bool _vsvsleq(
const VS1 &sl1,
const VS2 &sl2)
noexcept;
1122 template <
class VS>
friend bool _vsnot(
const VS &sl)
noexcept;
1123 template <
class VS>
friend void *_vsvoid(
const VS &sl)
noexcept;
1124 template <
class V>
friend std::ostream &_vsout(std::ostream &s,
const V &rv)
noexcept;
1125 template <
class V>
friend std::istream &_vsin(std::istream &s, V &rv)
noexcept;
1127 template <
class DP,
class VS,
class V>
friend void _vsvaccu(DP &dp,
const VS & sl,
const V &rv)
1128#if(CXSC_INDEX_CHECK)
1133 template <
class DP,
class VS1,
class VS2>
friend void _vsvsaccu(DP &dp,
const VS1 & sl1,
const VS2 &sl2)
1134#if(CXSC_INDEX_CHECK)
1140 template <
class VS,
class S,
class E>
friend E _vssdiv(
const VS &sl,
const S &s)
noexcept;
1141 template <
class VS,
class S,
class E>
friend E _vssmult(
const VS &sl,
const S &s)
noexcept;
1142 template <
class VS,
class V,
class E>
friend E _vsvmult(
const VS & sl,
const V &rv)
1143#if(CXSC_INDEX_CHECK)
1148 template <
class V,
class VS,
class E>
friend E _vvsplus(
const V &rv,
const VS &sl)
1149#if(CXSC_INDEX_CHECK)
1154 template <
class VS1,
class VS2,
class E>
friend E _vsvsplus(
const VS1 &s1,
const VS2 &s2)
1155#if(CXSC_INDEX_CHECK)
1160 template <
class VS1,
class VS2,
class E>
friend E _vsvsminus(
const VS1 &s1,
const VS2 &s2)
1161#if(CXSC_INDEX_CHECK)
1166 template <
class V,
class VS>
friend V &_vvsplusassign(V &rv,
const VS &sl)
1167#if(CXSC_INDEX_CHECK)
1172 template <
class VS,
class V>
friend VS &_vsvplusassign(VS &sl,
const V &rv)
1173#if(CXSC_INDEX_CHECK)
1178 template <
class VS1,
class VS2>
friend VS1 &_vsvsplusassign(VS1 &sl1,
const VS2 &sl2)
1179#if(CXSC_INDEX_CHECK)
1184 template <
class VS1,
class VS2>
friend VS1 &_vsvsminusassign(VS1 &sl1,
const VS2 &sl2)
1185#if(CXSC_INDEX_CHECK)
1190 template <
class V,
class VS>
friend V &_vvsminusassign(V &rv,
const VS &sl)
1191#if(CXSC_INDEX_CHECK)
1196 template <
class VS,
class V>
friend VS &_vsvminusassign(VS &sl,
const V &rv)
1197#if(CXSC_INDEX_CHECK)
1202 template <
class VS,
class V>
friend V _vsminus(
const VS &sl)
noexcept;
1203 template <
class V,
class VS,
class E>
friend E _vvsminus(
const V &rv,
const VS &sl)
1204#if(CXSC_INDEX_CHECK)
1209 template <
class VS,
class V,
class E>
friend E _vsvminus(
const VS &sl,
const V &rv)
1210#if(CXSC_INDEX_CHECK)
1215 template <
class VS1,
class VS2,
class E>
friend E _vsvsmult(
const VS1 & sl1,
const VS2 &sl2)
1216#if(CXSC_INDEX_CHECK)
1222 template <
class V,
class VS,
class E>
friend E _vvsconv(
const V &rv,
const VS &sl)
1223#if(CXSC_INDEX_CHECK)
1228 template <
class VS1,
class VS2,
class E>
friend E _vsvsconv(
const VS1 &s1,
const VS2 &s2)
1229#if(CXSC_INDEX_CHECK)
1234 template <
class V,
class VS,
class E>
friend E _vvssect(
const V &rv,
const VS &sl)
1235#if(CXSC_INDEX_CHECK)
1240 template <
class VS1,
class VS2,
class E>
friend E _vsvssect(
const VS1 &s1,
const VS2 &s2)
1241#if(CXSC_INDEX_CHECK)
1247 template <
class V,
class VS>
friend V &_vvssetinf(V &rv,
const VS &sl)
1248#if(CXSC_INDEX_CHECK)
1253 template <
class V,
class VS>
friend V &_vvsusetinf(V &rv,
const VS &sl)
1254#if(CXSC_INDEX_CHECK)
1259 template <
class V,
class VS>
friend V &_vvssetsup(V &rv,
const VS &sl)
1260#if(CXSC_INDEX_CHECK)
1265 template <
class V,
class VS>
friend V &_vvsusetsup(V &rv,
const VS &sl)
1266#if(CXSC_INDEX_CHECK)
1271 template <
class VS1,
class VS2>
friend VS1 &_vsvssetinf(VS1 &sl1,
const VS2 &sl2)
1272#if(CXSC_INDEX_CHECK)
1277 template <
class VS1,
class VS2>
friend VS1 &_vsvsusetinf(VS1 &sl1,
const VS2 &sl2)
1278#if(CXSC_INDEX_CHECK)
1283 template <
class VS1,
class VS2>
friend VS1 &_vsvssetsup(VS1 &sl1,
const VS2 &sl2)
1284#if(CXSC_INDEX_CHECK)
1289 template <
class VS1,
class VS2>
friend VS1 &_vsvsusetsup(VS1 &sl1,
const VS2 &sl2)
1290#if(CXSC_INDEX_CHECK)
1298 template <
class V,
class VS>
friend V &_vvsconvassign(V &rv,
const VS &sl)
1299#if(CXSC_INDEX_CHECK)
1304 template <
class VS,
class V>
friend VS &_vsvconvassign(VS &sl,
const V &rv)
1305#if(CXSC_INDEX_CHECK)
1310 template <
class VS1,
class VS2>
friend VS1 &_vsvsconvassign(VS1 &sl1,
const VS2 &sl2)
1311#if(CXSC_INDEX_CHECK)
1317 template <
class V,
class VS>
friend V &_vvssectassign(V &rv,
const VS &sl)
1318#if(CXSC_INDEX_CHECK)
1323 template <
class VS,
class V>
friend VS &_vsvsectassign(VS &sl,
const V &rv)
1324#if(CXSC_INDEX_CHECK)
1329 template <
class VS1,
class VS2>
friend VS1 &_vsvssectassign(VS1 &sl1,
const VS2 &sl2)
1330#if(CXSC_INDEX_CHECK)
1339 template <
class VS,
class V,
class E>
friend E _vsvimult(
const VS & sl,
const V &rv)
1340#if(CXSC_INDEX_CHECK)
1345 template <
class VS1,
class VS2,
class E>
friend E _vsvsimult(
const VS1 & sl1,
const VS2 &sl2)
1346#if(CXSC_INDEX_CHECK)
1352 template <
class VS1,
class VS2>
friend VS1 &_vsvssetim(VS1 &sl1,
const VS2 &sl2)
1353#if(CXSC_INDEX_CHECK)
1358 template <
class VS1,
class VS2>
friend VS1 &_vsvssetre(VS1 &sl1,
const VS2 &sl2)
1359#if(CXSC_INDEX_CHECK)
1364 template <
class V,
class VS>
friend V &_vvssetim(V &rv,
const VS &sl)
1365#if(CXSC_INDEX_CHECK)
1370 template <
class V,
class VS>
friend V &_vvssetre(V &rv,
const VS &sl)
1371#if(CXSC_INDEX_CHECK)
1379 template <
class VS,
class V,
class E>
friend E _vsvcmult(
const VS & sl,
const V &rv)
1380#if(CXSC_INDEX_CHECK)
1385 template <
class VS1,
class VS2,
class E>
friend E _vsvscmult(
const VS1 & sl1,
const VS2 &sl2)
1386#if(CXSC_INDEX_CHECK)
1392 template <
class VS,
class V,
class E>
friend E _vsvcimult(
const VS & sl,
const V &rv)
1393#if(CXSC_INDEX_CHECK)
1398 template <
class VS1,
class VS2,
class E>
friend E _vsvscimult(
const VS1 & sl1,
const VS2 &sl2)
1399#if(CXSC_INDEX_CHECK)
1405 template <
class VS,
class V,
class E>
friend E _vsvlmult(
const VS & sl,
const V &rv)
1406#if(CXSC_INDEX_CHECK)
1411 template <
class VS1,
class VS2,
class E>
friend E _vsvslmult(
const VS1 & sl1,
const VS2 &sl2)
1412#if(CXSC_INDEX_CHECK)
1418 template <
class VS,
class V,
class E>
friend E _vsvlimult(
const VS & sl,
const V &rv)
1419#if(CXSC_INDEX_CHECK)
1424 template <
class VS1,
class VS2,
class E>
friend E _vsvslimult(
const VS1 & sl1,
const VS2 &sl2)
1425#if(CXSC_INDEX_CHECK)
1439 explicit INLINE
rvector_slice(
rvector &a,
const int &lb,
const int &ub)
noexcept:dat(a.dat),l(a.l),u(a.u),size(ub-lb+1),start(lb),end(ub) { }
1441 explicit INLINE
rvector_slice(
rvector_slice &a,
const int &lb,
const int &ub)
noexcept:dat(a.dat),l(a.l),u(a.u),size(ub-lb+1),start(lb),end(ub) { }
1448#if(CXSC_INDEX_CHECK)
1455#if(CXSC_INDEX_CHECK)
1468#if(CXSC_INDEX_CHECK)
1475#if(CXSC_INDEX_CHECK)
1486#if(CXSC_INDEX_CHECK)
1499#if(CXSC_INDEX_CHECK)
1507#if(CXSC_INDEX_CHECK)
1517#if(CXSC_INDEX_CHECK)
1524#if(CXSC_INDEX_CHECK)
1535#if(CXSC_INDEX_CHECK)
1542#if(CXSC_INDEX_CHECK)
1549#if(CXSC_INDEX_CHECK)
1556#if(CXSC_INDEX_CHECK)
1563#if(CXSC_INDEX_CHECK)
1579 INLINE
operator void*()
noexcept;
1587 INLINE rvector
_rvector(
const real &r)
noexcept;
1592 INLINE
void Resize(rvector &rv)
noexcept;
1594 INLINE
void Resize(rvector &rv,
const int &len)
1595#if(CXSC_INDEX_CHECK)
1601 INLINE
void Resize(rvector &rv,
const int &lb,
const int &ub)
1602#if(CXSC_INDEX_CHECK)
1609 INLINE rvector
abs(
const rvector &rv)
noexcept;
1611 INLINE rvector
abs(
const rvector_slice &sl)
noexcept;
1613 INLINE
bool operator !(
const rvector &rv)
noexcept;
1615 INLINE
bool operator !(
const rvector_slice &sl)
noexcept;
1620 INLINE rvector
operator *(
const rvector &rv,
const real &s)
noexcept;
1622 INLINE rvector
operator *(
const rvector_slice &sl,
const real &s)
noexcept;
1624 INLINE rvector
operator *(
const real &s,
const rvector &rv)
noexcept;
1626 INLINE rvector
operator *(
const real &s,
const rvector_slice &sl)
noexcept;
1628 INLINE rvector &
operator *=(rvector &rv,
const real &r)
noexcept;
1631 INLINE rvector
operator /(
const rvector &rv,
const real &s)
noexcept;
1633 INLINE rvector
operator /(
const rvector_slice &sl,
const real &s)
noexcept;
1635 INLINE rvector &
operator /=(rvector &rv,
const real &r)
noexcept;
1640 void accumulate(dotprecision &dp,
const rvector &);
1643 void accumulate(dotprecision &dp,
const rvector & rv1,
const rvector &rv2)
1644#if(CXSC_INDEX_CHECK)
1651 void accumulate_approx(dotprecision &dp,
const rvector & rv1,
const rvector &rv2);
1655 void accumulate(dotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2)
1656#if(CXSC_INDEX_CHECK)
1663 void accumulate_approx(dotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2);
1667 void accumulate(dotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2)
1668#if(CXSC_INDEX_CHECK)
1675 void accumulate_approx(dotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2);
1678 void accumulate(dotprecision &dp,
const rvector_slice &sl,
const rvector &rv)
1679#if(CXSC_INDEX_CHECK)
1686 void accumulate_approx(dotprecision &dp,
const rvector_slice &sl,
const rvector &rv);
1690 void accumulate(dotprecision &dp,
const rvector &rv,
const rvector_slice &sl)
1691#if(CXSC_INDEX_CHECK)
1698 void accumulate_approx(dotprecision &dp,
const rvector &rv,
const rvector_slice &sl);
1702 void accumulate(dotprecision &dp,
const rvector_slice & sl1,
const rvector_slice &sl2)
1703#if(CXSC_INDEX_CHECK)
1710 void accumulate_approx(dotprecision &dp,
const rvector_slice & sl1,
const rvector_slice &sl2);
1714 void accumulate(idotprecision &dp,
const rvector & rv1,
const rvector &rv2)
1715#if(CXSC_INDEX_CHECK)
1721 void accumulate(idotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2)
1722#if(CXSC_INDEX_CHECK)
1728 void accumulate(idotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2)
1729#if(CXSC_INDEX_CHECK)
1735 void accumulate(idotprecision &dp,
const rvector_slice &sl,
const rvector &rv)
1736#if(CXSC_INDEX_CHECK)
1742 void accumulate(idotprecision &dp,
const rvector &rv,
const rvector_slice &sl)
1743#if(CXSC_INDEX_CHECK)
1749 void accumulate(idotprecision &dp,
const rvector_slice & sl1,
const rvector_slice &sl2)
1750#if(CXSC_INDEX_CHECK)
1757 void accumulate(cdotprecision &dp,
const rvector & rv1,
const rvector &rv2)
1758#if(CXSC_INDEX_CHECK)
1765 void accumulate_approx(cdotprecision &dp,
const rvector & rv1,
const rvector &rv2);
1768 void accumulate(cdotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2)
1769#if(CXSC_INDEX_CHECK)
1776 void accumulate_approx(cdotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2);
1779 void accumulate(cdotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2)
1780#if(CXSC_INDEX_CHECK)
1787 void accumulate_approx(cdotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2);
1790 void accumulate(cdotprecision &dp,
const rvector_slice &sl,
const rvector &rv)
1791#if(CXSC_INDEX_CHECK)
1798 void accumulate_approx(cdotprecision &dp,
const rvector_slice &sl,
const rvector &rv);
1801 void accumulate(cdotprecision &dp,
const rvector &rv,
const rvector_slice &sl)
1802#if(CXSC_INDEX_CHECK)
1809 void accumulate_approx(cdotprecision &dp,
const rvector &rv,
const rvector_slice &sl);
1812 void accumulate(cdotprecision &dp,
const rvector_slice & sl1,
const rvector_slice &sl2)
1813#if(CXSC_INDEX_CHECK)
1820 void accumulate_approx(cdotprecision &dp,
const rvector_slice & sl1,
const rvector_slice &sl2);
1823 void accumulate(cidotprecision &dp,
const rvector & rv1,
const rvector &rv2)
1824#if(CXSC_INDEX_CHECK)
1830 void accumulate(cidotprecision &dp,
const rvector & rv1,
const rmatrix_subv &rv2)
1831#if(CXSC_INDEX_CHECK)
1837 void accumulate(cidotprecision &dp,
const rmatrix_subv & rv1,
const rvector &rv2)
1838#if(CXSC_INDEX_CHECK)
1844 void accumulate(cidotprecision &dp,
const rvector_slice &sl,
const rvector &rv)
1845#if(CXSC_INDEX_CHECK)
1851 void accumulate(cidotprecision &dp,
const rvector &rv,
const rvector_slice &sl)
1852#if(CXSC_INDEX_CHECK)
1858 void accumulate(cidotprecision &dp,
const rvector_slice & sl1,
const rvector_slice &sl2)
1859#if(CXSC_INDEX_CHECK)
1866 INLINE real
operator *(
const rvector & rv1,
const rvector &rv2)
1867#if(CXSC_INDEX_CHECK)
1873 INLINE real
operator *(
const rvector_slice &sl,
const rvector &rv)
1874#if(CXSC_INDEX_CHECK)
1880 INLINE real
operator *(
const rvector &rv,
const rvector_slice &sl)
1881#if(CXSC_INDEX_CHECK)
1887 INLINE real
operator *(
const rvector_slice & sl1,
const rvector_slice &sl2)
1888#if(CXSC_INDEX_CHECK)
1895 INLINE
const rvector &operator +(
const rvector &rv)
noexcept;
1897 INLINE rvector operator +(
const rvector_slice &sl)
noexcept;
1899 INLINE rvector operator +(
const rvector &rv1,
const rvector &rv2)
1900#if(CXSC_INDEX_CHECK)
1906 INLINE rvector operator +(
const rvector &rv,
const rvector_slice &sl)
1907#if(CXSC_INDEX_CHECK)
1913 INLINE rvector operator +(
const rvector_slice &sl,
const rvector &rv)
1914#if(CXSC_INDEX_CHECK)
1920 INLINE rvector operator +(
const rvector_slice &sl1,
const rvector_slice &sl2)
1921#if(CXSC_INDEX_CHECK)
1927 INLINE rvector &
operator +=(rvector &rv1,
const rvector &rv2)
1928#if(CXSC_INDEX_CHECK)
1934 INLINE rvector &
operator +=(rvector &rv,
const rvector_slice &sl)
1935#if(CXSC_INDEX_CHECK)
1942 INLINE rvector operator -(
const rvector &rv)
noexcept;
1944 INLINE rvector operator -(
const rvector_slice &sl)
noexcept;
1946 INLINE rvector operator -(
const rvector &rv1,
const rvector &rv2)
1947#if(CXSC_INDEX_CHECK)
1953 INLINE rvector operator -(
const rvector &rv,
const rvector_slice &sl)
1954#if(CXSC_INDEX_CHECK)
1960 INLINE rvector operator -(
const rvector_slice &sl,
const rvector &rv)
1961#if(CXSC_INDEX_CHECK)
1967 INLINE rvector operator -(
const rvector_slice &sl1,
const rvector_slice &sl2)
1968#if(CXSC_INDEX_CHECK)
1974 INLINE rvector & operator -=(rvector &rv1,
const rvector &rv2)
1975#if(CXSC_INDEX_CHECK)
1981 INLINE rvector &operator -=(rvector &rv,
const rvector_slice &sl)
1982#if(CXSC_INDEX_CHECK)
1989 INLINE
bool operator ==(
const rvector &rv1,
const rvector &rv2)
noexcept;
1991 INLINE
bool operator ==(
const rvector_slice &sl1,
const rvector_slice &sl2)
noexcept;
1993 INLINE
bool operator ==(
const rvector_slice &sl,
const rvector &rv)
noexcept;
1995 INLINE
bool operator ==(
const rvector &rv,
const rvector_slice &sl)
noexcept;
1997 INLINE
bool operator !=(
const rvector &rv1,
const rvector &rv2)
noexcept;
1999 INLINE
bool operator !=(
const rvector_slice &sl1,
const rvector_slice &sl2)
noexcept;
2001 INLINE
bool operator !=(
const rvector_slice &sl,
const rvector &rv)
noexcept;
2003 INLINE
bool operator !=(
const rvector &rv,
const rvector_slice &sl)
noexcept;
2005 INLINE
bool operator <(
const rvector &rv1,
const rvector &rv2)
noexcept;
2007 INLINE
bool operator <(
const rvector_slice &sl1,
const rvector_slice &sl2)
noexcept;
2009 INLINE
bool operator < (
const rvector_slice &sl,
const rvector &rv)
noexcept;
2011 INLINE
bool operator < (
const rvector &rv,
const rvector_slice &sl)
noexcept;
2013 INLINE
bool operator <=(
const rvector &rv1,
const rvector &rv2)
noexcept;
2015 INLINE
bool operator <=(
const rvector_slice &sl1,
const rvector_slice &sl2)
noexcept;
2017 INLINE
bool operator <=(
const rvector_slice &sl,
const rvector &rv)
noexcept;
2019 INLINE
bool operator <=(
const rvector &rv,
const rvector_slice &sl)
noexcept;
2021 INLINE
bool operator >(
const rvector &rv1,
const rvector &rv2)
noexcept;
2023 INLINE
bool operator >(
const rvector_slice &sl1,
const rvector_slice &sl2)
noexcept;
2025 INLINE
bool operator >(
const rvector_slice &sl,
const rvector &rv)
noexcept;
2027 INLINE
bool operator >(
const rvector &rv,
const rvector_slice &sl)
noexcept;
2029 INLINE
bool operator >=(
const rvector &rv1,
const rvector &rv2)
noexcept;
2031 INLINE
bool operator >=(
const rvector_slice &sl1,
const rvector_slice &sl2)
noexcept;
2033 INLINE
bool operator >=(
const rvector_slice &sl,
const rvector &rv)
noexcept;
2035 INLINE
bool operator >=(
const rvector &rv,
const rvector_slice &sl)
noexcept;
2038 INLINE std::ostream &operator <<(std::ostream &s,
const rvector &rv)
noexcept;
2040 INLINE std::ostream &operator <<(std::ostream &o,
const rvector_slice &sl)
noexcept;
2042 INLINE std::istream &operator >>(std::istream &s, rvector &rv)
noexcept;
2044 INLINE std::istream &operator >>(std::istream &s, rvector_slice &rv)
noexcept;
2049#ifdef _CXSC_INCL_INL
2050#include "rvector.inl"
2051#include "vector.inl"
2055#define _CXSC_BLAS_RVECTOR
2056#include "cxsc_blas.inl"
The Data Type civector_slice.
The Data Type cvector_slice.
The Multiple-Precision Data Type l_imatrix.
The Multiple-Precision Data Type l_ivector.
The Multiple-Precision Data Type l_rmatrix.
The Multiple-Precision Data Type l_rvector.
real(void) noexcept
Constructor of class real.
The Data Type rmatrix_slice.
The Data Type rmatrix_subv.
The Data Type rvector_slice.
rvector_slice & operator+=(const rvector &rv) noexcept
Implementation of addition and allocation operation.
real & operator[](const int &i) noexcept
Operator for accessing the single elements of the vector.
rvector_slice & operator-=(const rvector &rv) noexcept
Implementation of subtraction and allocation operation.
rvector_slice & operator/=(const real &r) noexcept
Implementation of division and allocation operation.
rvector_slice & operator=(const rvector_slice &sl) noexcept
Implementation of standard assigning operator.
rvector_slice & operator()() noexcept
Operator for accessing the whole vector.
friend int Ub(const rvector_slice &sl) noexcept
Returns the upper bound of the vector.
rvector_slice(const rvector_slice &a) noexcept
Constructor of class rvector_slice.
friend int Lb(const rvector_slice &sl) noexcept
Returns the lower bound of the vector.
rvector_slice(rvector &a, const int &lb, const int &ub) noexcept
Constructor of class rvector_slice.
friend int VecLen(const rvector_slice &sl) noexcept
Returns the dimension of the vector.
rvector_slice & operator*=(const real &r) noexcept
Implementation of multiplication and allocation operation.
rvector_slice(rvector_slice &a, const int &lb, const int &ub) noexcept
Constructor of class rvector_slice.
rvector & operator-=(const srvector &rv)
Implementation of addition and allocation operation.
friend rvector & SetLb(rvector &rv, const int &l) noexcept
Sets the lower bound of the vector.
rvector & operator+=(const srvector &rv)
Implementation of addition and allocation operation.
friend rvector InfIm(const civector &v) noexcept
Returns componentwise the infimum of the imaginary part.
rvector & operator=(const rvector &rv) noexcept
Implementation of standard assigning operator.
friend int VecLen(const rvector &rv) noexcept
Returns the dimension of the vector.
real & operator[](const int &i) const noexcept
Operator for accessing the single elements of the vector (read-only)
friend rvector InfRe(const civector &v) noexcept
Returns componentwise the infimum of the real part.
friend rvector SupIm(const civector &v) noexcept
Returns componentwise the supremum of the imaginary part.
rvector & operator()() noexcept
Operator for accessing the whole vector.
friend rvector SupRe(const civector &v) noexcept
Returns componentwise the supremum of the real part.
friend rvector & SetUb(rvector &rv, const int &u) noexcept
Sets the upper bound of the vector.
rvector() noexcept
Constructor of class rvector.
friend int Ub(const rvector &rv) noexcept
Returns the upper bound of the vector.
friend int Lb(const rvector &rv) noexcept
Returns the lower bound of the vector.
Helper class for slices of sparse vectors.
The namespace cxsc, providing all functionality of the class library C-XSC.
cdotprecision & operator+=(cdotprecision &cd, const l_complex &lc) noexcept
Implementation of standard algebraic addition and allocation operation.
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...
rvector _rvector(const real &r) noexcept
Deprecated typecast, which only exist for the reason of compatibility with older versions of C-XSC.
civector operator/(const cimatrix_subv &rv, const cinterval &s) noexcept
Implementation of division operation.
cimatrix & operator*=(cimatrix &m, const cinterval &c) noexcept
Implementation of multiplication and allocation operation.
ivector abs(const cimatrix_subv &mv) noexcept
Returns the absolute value of the matrix.
civector operator*(const cimatrix_subv &rv, const cinterval &s) noexcept
Implementation of multiplication operation.
void Resize(cimatrix &A) noexcept
Resizes the matrix.
cimatrix & operator/=(cimatrix &m, const cinterval &c) noexcept
Implementation of division and allocation operation.