26 #ifndef _CXSC_CVECTOR_HPP_INCLUDED
27 #define _CXSC_CVECTOR_HPP_INCLUDED
29 #include "xscclass.hpp"
33 #include "complex.hpp"
35 #include "rvector.hpp"
69 double* to_blas_array()
const {
return (
double*)dat; }
71 #ifdef _CXSC_FRIEND_TPL
74 template <
class V,
class MS,
class S>
friend void _vmsconstr(V &v,
const MS &m)
80 template <
class V,
class M,
class S>
friend void _vmconstr(V &v,
const M &m)
86 template <
class V>
friend void _vresize(V &rv) noexcept;
87 template <
class V,
class S>
friend void _vresize(V &rv,
const int &len)
93 template <
class V,
class S>
friend void _vresize(V &rv,
const int &lb,
const int &ub)
99 template <
class V1,
class V2,
class S>
friend V1 &_vvassign(V1 &rv1,
const V2 &rv2) noexcept;
100 template <
class V,
class S>
friend V & _vsassign(V &rv,
const S &r) noexcept;
101 template <
class V,
class VS,
class S>
friend V & _vvsassign(V &rv,
const VS &sl) noexcept;
102 template <
class VS,
class V>
friend VS & _vsvassign(VS &sl,
const V &rv)
103 #if(CXSC_INDEX_CHECK)
108 template <
class V,
class M,
class S>
friend V &_vmassign(V &v,
const M &m)
109 #if(CXSC_INDEX_CHECK)
114 template <
class M,
class V,
class S>
friend M &_mvassign(M &m,
const V &v) noexcept;
115 template <
class V>
friend V _vconj(
const V &rv) noexcept;
116 template <
class VS,
class E>
friend E _vsconj(
const VS &sl) noexcept;
117 template <
class V,
class E>
friend E _vabs(
const V &rv) noexcept;
118 template <
class VS,
class E>
friend E _vsabs(
const VS &sl) noexcept;
119 template <
class MV,
class V>
friend V _mvabs(
const MV &mv) noexcept;
120 template <
class V,
class E>
friend E _vim(
const V &rv) noexcept;
121 template <
class V,
class E>
friend E _vre(
const V &rv) noexcept;
122 template <
class V1,
class V2>
friend V1 &_vvsetim(V1 &rv1,
const V2 &rv2)
123 #if(CXSC_INDEX_CHECK)
128 template <
class V1,
class V2>
friend V1 &_vvsetre(V1 &rv1,
const V2 &rv2)
129 #if(CXSC_INDEX_CHECK)
134 template <
class V,
class VS>
friend V &_vvssetim(V &rv,
const VS &sl)
135 #if(CXSC_INDEX_CHECK)
140 template <
class V,
class VS>
friend V &_vvssetre(V &rv,
const VS &sl)
141 #if(CXSC_INDEX_CHECK)
146 template <
class V,
class MV>
friend V &_vmvsetim(V &rv,
const MV &v)
147 #if(CXSC_INDEX_CHECK)
152 template <
class V,
class MV>
friend V &_vmvsetre(V &rv,
const MV &v)
153 #if(CXSC_INDEX_CHECK)
158 template <
class V,
class S>
friend V &_vssetre(V &v,
const S &s) noexcept;
159 template <
class V,
class S>
friend V &_vssetim(V &v,
const S &s) noexcept;
162 template <
class DP,
class V1,
class V2>
friend void _vvaccu(DP &dp,
const V1 & rv1,
const V2 &rv2)
163 #if(CXSC_INDEX_CHECK)
168 template <
class DP,
class VS,
class V>
friend void _vsvaccu(DP &dp,
const VS & sl,
const V &rv)
169 #if(CXSC_INDEX_CHECK)
174 template <
class V1,
class V2,
class E>
friend E _vvcmult(
const V1 & rv1,
const V2 &rv2)
175 #if(CXSC_INDEX_CHECK)
180 template <
class VS,
class V,
class E>
friend E _vsvcmult(
const VS & sl,
const V &rv)
181 #if(CXSC_INDEX_CHECK)
186 template <
class V,
class S>
friend V &_vsmultassign(V &rv,
const S &r) noexcept;
187 template <
class V1,
class V2,
class E>
friend E _vvplus(
const V1 &rv1,
const V2 &rv2)
188 #if(CXSC_INDEX_CHECK)
193 template <
class V,
class VS,
class E>
friend E _vvsplus(
const V &rv,
const VS &sl)
194 #if(CXSC_INDEX_CHECK)
199 template <
class VS1,
class VS2,
class E>
friend E _vsvsplus(
const VS1 &s1,
const VS2 &s2)
200 #if(CXSC_INDEX_CHECK)
205 template <
class VS1,
class VS2,
class E>
friend E _vsvsminus(
const VS1 &s1,
const VS2 &s2)
206 #if(CXSC_INDEX_CHECK)
211 template <
class V1,
class V2>
friend V1 &_vvplusassign(V1 &rv1,
const V2 &rv2)
212 #if(CXSC_INDEX_CHECK)
217 template <
class V,
class VS>
friend V &_vvsplusassign(V &rv,
const VS &sl)
218 #if(CXSC_INDEX_CHECK)
223 template <
class VS,
class V>
friend VS &_vsvplusassign(VS &sl,
const V &rv)
224 #if(CXSC_INDEX_CHECK)
229 template <
class VS1,
class VS2>
friend VS1 &_vsvsplusassign(VS1 &sl1,
const VS2 &sl2)
230 #if(CXSC_INDEX_CHECK)
235 template <
class VS1,
class VS2>
friend VS1 &_vsvsminusassign(VS1 &sl1,
const VS2 &sl2)
236 #if(CXSC_INDEX_CHECK)
241 template <
class V1,
class V2>
friend V1 &_vvminusassign(V1 &rv1,
const V2 &rv2)
242 #if(CXSC_INDEX_CHECK)
247 template <
class V,
class VS>
friend V &_vvsminusassign(V &rv,
const VS &sl)
248 #if(CXSC_INDEX_CHECK)
253 template <
class VS,
class V>
friend VS &_vsvminusassign(VS &sl,
const V &rv)
254 #if(CXSC_INDEX_CHECK)
259 template <
class V>
friend V _vminus(
const V &rv) noexcept;
260 template <
class VS,
class V>
friend V _vsminus(
const VS &sl) noexcept;
261 template <
class V1,
class V2,
class E>
friend E _vvminus(
const V1 &rv1,
const V2 &rv2)
262 #if(CXSC_INDEX_CHECK)
267 template <
class V,
class VS,
class E>
friend E _vvsminus(
const V &rv,
const VS &sl)
268 #if(CXSC_INDEX_CHECK)
273 template <
class VS,
class V,
class E>
friend E _vsvminus(
const VS &sl,
const V &rv)
274 #if(CXSC_INDEX_CHECK)
279 template <
class V,
class MV,
class S>
friend S _vmvcmult(
const V &rv1,
const MV &rv2)
280 #if(CXSC_INDEX_CHECK)
285 template <
class V,
class MV,
class S>
friend S _vmvcimult(
const V &rv1,
const MV &rv2)
286 #if(CXSC_INDEX_CHECK)
291 template <
class V1,
class V2,
class E>
friend E _vvconv(
const V1 &rv1,
const V2 &rv2)
292 #if(CXSC_INDEX_CHECK)
297 template <
class V,
class VS,
class E>
friend E _vvsconv(
const V &rv,
const VS &sl)
298 #if(CXSC_INDEX_CHECK)
303 template <
class VS1,
class VS2,
class E>
friend E _vsvsconv(
const VS1 &s1,
const VS2 &s2)
304 #if(CXSC_INDEX_CHECK)
310 template <
class V,
class S,
class E>
friend E _vsdiv(
const V &rv,
const S &s) noexcept;
311 template <
class V,
class S>
friend V &_vsdivassign(V &rv,
const S &r) noexcept;
312 template <
class VS,
class S,
class E>
friend E _vssdiv(
const VS &sl,
const S &s) noexcept;
313 template <
class V,
class S,
class E>
friend E _vsmult(
const V &rv,
const S &s) noexcept;
314 template <
class VS,
class S,
class E>
friend E _vssmult(
const VS &sl,
const S &s) noexcept;
315 template <
class MV,
class S,
class E>
friend E _mvsmult(
const MV &rv,
const S &s) noexcept;
316 template <
class MV1,
class MV2,
class E>
friend E _mvmvplus(
const MV1 &rv1,
const MV2 &rv2)
317 #if(CXSC_INDEX_CHECK)
322 template <
class MV,
class V,
class E>
friend E _mvvplus(
const MV &rv1,
const V &rv2)
323 #if(CXSC_INDEX_CHECK)
328 template <
class MV,
class V,
class E>
friend E _mvvminus(
const MV &rv1,
const V &rv2)
329 #if(CXSC_INDEX_CHECK)
334 template <
class V,
class MV,
class E>
friend E _vmvminus(
const V &rv1,
const MV &rv2)
335 #if(CXSC_INDEX_CHECK)
340 template <
class MV1,
class MV2,
class E>
friend E _mvmvminus(
const MV1 &rv1,
const MV2 &rv2)
341 #if(CXSC_INDEX_CHECK)
346 template <
class MV,
class V>
friend MV &_mvvplusassign(MV &v,
const V &rv)
347 #if(CXSC_INDEX_CHECK)
352 template <
class MV,
class V>
friend MV &_mvvminusassign(MV &v,
const V &rv)
353 #if(CXSC_INDEX_CHECK)
358 template <
class MV,
class S,
class E>
friend E _mvsdiv(
const MV &rv,
const S &s) noexcept;
359 template <
class MV,
class V>
friend MV &_mvvassign(MV &v,
const V &rv)
360 #if(CXSC_INDEX_CHECK)
365 template <
class DP,
class V,
class SV>
friend void _vmvaccu(DP &dp,
const V & rv1,
const SV &rv2)
366 #if(CXSC_INDEX_CHECK)
372 template <
class V1,
class V2>
friend bool _vveq(
const V1 &rv1,
const V2 &rv2) noexcept;
373 template <
class VS,
class V>
friend bool _vsveq(
const VS &sl,
const V &rv) noexcept;
374 template <
class V1,
class V2>
friend bool _vvneq(
const V1 &rv1,
const V2 &rv2) noexcept;
375 template <
class VS,
class V>
friend bool _vsvneq(
const VS &sl,
const V &rv) noexcept;
376 template <
class V1,
class V2>
friend bool _vvless(
const V1 &rv1,
const V2 &rv2) noexcept;
377 template <
class VS,
class V>
friend bool _vsvless(
const VS &sl,
const V &rv) noexcept;
378 template <
class V1,
class V2>
friend bool _vvleq(
const V1 &rv1,
const V2 &rv2) noexcept;
379 template <
class VS,
class V>
friend bool _vsvleq(
const VS &sl,
const V &rv) noexcept;
380 template <
class V,
class VS>
friend bool _vvsless(
const V &rv,
const VS &sl) noexcept;
381 template <
class V,
class VS>
friend bool _vvsleq(
const V &rv,
const VS &sl) noexcept;
382 template <
class V>
friend bool _vnot(
const V &rv) noexcept;
383 template <
class V>
friend void *_vvoid(
const V &rv) noexcept;
384 template <
class VS1,
class VS2>
friend bool _vsvseq(
const VS1 &sl1,
const VS2 &sl2) noexcept;
385 template <
class VS1,
class VS2>
friend bool _vsvsneq(
const VS1 &sl1,
const VS2 &sl2) noexcept;
386 template <
class VS1,
class VS2>
friend bool _vsvsless(
const VS1 &sl1,
const VS2 &sl2) noexcept;
387 template <
class VS1,
class VS2>
friend bool _vsvsleq(
const VS1 &sl1,
const VS2 &sl2) noexcept;
388 template <
class VS>
friend bool _vsnot(
const VS &sl) noexcept;
389 template <
class VS>
friend void *_vsvoid(
const VS &sl) noexcept;
390 template <
class V>
friend std::ostream &_vout(std::ostream &s,
const V &rv) noexcept;
391 template <
class V>
friend std::istream &_vin(std::istream &s, V &rv) noexcept;
394 template <
class V,
class MV2,
class S>
friend V &_vmvassign(V &v,
const MV2 &rv) noexcept;
395 template <
class M,
class V,
class E>
friend E _mvcmult(
const M &m,
const V &v)
396 #if(CXSC_INDEX_CHECK)
401 template <
class M,
class V,
class E>
friend E _mvcimult(
const M &m,
const V &v)
402 #if(CXSC_INDEX_CHECK)
407 template <
class V,
class M,
class E>
friend E _vmcmult(
const V &v,
const M &m)
408 #if(CXSC_INDEX_CHECK)
413 template <
class V,
class M,
class E>
friend E _vmcimult(
const V &v,
const M &m)
414 #if(CXSC_INDEX_CHECK)
419 template <
class V,
class M,
class S>
friend V &_vmcmultassign(V &v,
const M &m)
420 #if(CXSC_INDEX_CHECK)
425 template <
class V,
class M,
class S>
friend V &_vmcimultassign(V &v,
const M &m)
426 #if(CXSC_INDEX_CHECK)
431 template <
class MS,
class V,
class E>
friend E _msvcmult(
const MS &ms,
const V &v)
432 #if(CXSC_INDEX_CHECK)
437 template <
class MS,
class V,
class E>
friend E _msvcimult(
const MS &ms,
const V &v)
438 #if(CXSC_INDEX_CHECK)
443 template <
class V,
class MS,
class E>
friend E _vmscmult(
const V &v,
const MS &ms)
444 #if(CXSC_INDEX_CHECK)
449 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
450 #if(CXSC_INDEX_CHECK)
455 template <
class V,
class MS,
class S>
friend V &_vmscmultassign(V &v,
const MS &ms)
456 #if(CXSC_INDEX_CHECK)
461 template <
class V,
class MS,
class S>
friend V &_vmscimultassign(V &v,
const MS &ms)
462 #if(CXSC_INDEX_CHECK)
475 template <
class V1,
class V2,
class E>
friend E _vvcimult(
const V1 & rv1,
const V2 &rv2)
476 #if(CXSC_INDEX_CHECK)
481 template <
class VS,
class V,
class E>
friend E _vsvcimult(
const VS & sl,
const V &rv)
482 #if(CXSC_INDEX_CHECK)
487 template <
class VS1,
class VS2,
class E>
friend E _vsvscimult(
const VS1 & sl1,
const VS2 &sl2)
488 #if(CXSC_INDEX_CHECK)
493 template <
class V1,
class V2,
class E>
friend E _vvsect(
const V1 &rv1,
const V2 &rv2)
494 #if(CXSC_INDEX_CHECK)
499 template <
class V,
class VS,
class E>
friend E _vvssect(
const V &rv,
const VS &sl)
500 #if(CXSC_INDEX_CHECK)
505 template <
class VS1,
class VS2,
class E>
friend E _vsvssect(
const VS1 &s1,
const VS2 &s2)
506 #if(CXSC_INDEX_CHECK)
514 template <
class V1,
class V2>
friend V1 &_vvsetinf(V1 &rv1,
const V2 &rv2)
515 #if(CXSC_INDEX_CHECK)
520 template <
class V1,
class V2>
friend V1 &_vvsetsup(V1 &rv1,
const V2 &rv2)
521 #if(CXSC_INDEX_CHECK)
526 template <
class V1,
class V2>
friend V1 &_vvusetinf(V1 &rv1,
const V2 &rv2)
527 #if(CXSC_INDEX_CHECK)
532 template <
class V1,
class V2>
friend V1 &_vvusetsup(V1 &rv1,
const V2 &rv2)
533 #if(CXSC_INDEX_CHECK)
538 template <
class VS,
class V>
friend VS &_vsvsetinf(VS &sl,
const V &rv)
539 #if(CXSC_INDEX_CHECK)
544 template <
class VS,
class V>
friend VS &_vsvsetsup(VS &sl,
const V &rv)
545 #if(CXSC_INDEX_CHECK)
550 template <
class VS,
class V>
friend VS &_vsvusetinf(VS &sl,
const V &rv)
551 #if(CXSC_INDEX_CHECK)
556 template <
class VS,
class V>
friend VS &_vsvusetsup(VS &sl,
const V &rv)
557 #if(CXSC_INDEX_CHECK)
562 template <
class MV,
class V>
friend MV &_mvvsetinf(MV &v,
const V &rv)
563 #if(CXSC_INDEX_CHECK)
568 template <
class MV,
class V>
friend MV &_mvvsetsup(MV &v,
const V &rv)
569 #if(CXSC_INDEX_CHECK)
574 template <
class MV,
class V>
friend MV &_mvvusetinf(MV &v,
const V &rv)
575 #if(CXSC_INDEX_CHECK)
580 template <
class MV,
class V>
friend MV &_mvvusetsup(MV &v,
const V &rv)
581 #if(CXSC_INDEX_CHECK)
586 template <
class V,
class E>
friend E _vmid(
const V &rv) noexcept;
587 template <
class V,
class E>
friend E _vinf(
const V &rv) noexcept;
588 template <
class V,
class E>
friend E _vsup(
const V &rv) noexcept;
589 template <
class V,
class E>
friend E _vdiam(
const V &rv) noexcept;
590 template <
class VS,
class E>
friend E _vsmid(
const VS &sl) noexcept;
591 template <
class VS,
class E>
friend E _vsinf(
const VS &sl) noexcept;
592 template <
class VS,
class E>
friend E _vssup(
const VS &sl) noexcept;
593 template <
class VS,
class E>
friend E _vsdiam(
const VS &sl) noexcept;
594 template <
class MV,
class V>
friend V _mvdiam(
const MV &mv) noexcept;
595 template <
class MV,
class V>
friend V _mvmid(
const MV &mv) noexcept;
596 template <
class MV,
class V>
friend V _mvinf(
const MV &mv) noexcept;
597 template <
class MV,
class V>
friend V _mvsup(
const MV &mv) noexcept;
600 template <
class V1,
class V2>
friend V1 &_vvconvassign(V1 &rv1,
const V2 &rv2)
601 #if(CXSC_INDEX_CHECK)
606 template <
class V1,
class V2>
friend V1 &_vvsectassign(V1 &rv1,
const V2 &rv2)
607 #if(CXSC_INDEX_CHECK)
612 template <
class VS,
class V>
friend VS &_vsvconvassign(VS &sl,
const V &rv)
613 #if(CXSC_INDEX_CHECK)
618 template <
class VS,
class V>
friend VS &_vsvsectassign(VS &sl,
const V &rv)
619 #if(CXSC_INDEX_CHECK)
624 template <
class MV,
class V>
friend MV &_mvvconvassign(MV &v,
const V &rv)
625 #if(CXSC_INDEX_CHECK)
630 template <
class MV,
class V>
friend MV &_mvvsectassign(MV &v,
const V &rv)
631 #if(CXSC_INDEX_CHECK)
644 explicit cvector(
const int &i) noexcept;
647 explicit cvector(
const class index &i) noexcept;
650 explicit cvector(
const int &i1,
const int &i2)
651 #if(CXSC_INDEX_CHECK)
662 #if(CXSC_INDEX_CHECK)
669 #if(CXSC_INDEX_CHECK)
695 #if(CXSC_INDEX_CHECK)
702 #if(CXSC_INDEX_CHECK)
723 #if(CXSC_INDEX_CHECK)
730 #if(CXSC_INDEX_CHECK)
750 #if(CXSC_INDEX_CHECK)
757 #if(CXSC_INDEX_CHECK)
780 INLINE ~
cvector() {
delete [] dat; }
785 #if(CXSC_INDEX_CHECK)
791 friend INLINE
int Lb(
const cvector &rv) noexcept {
return rv.l; }
793 friend INLINE
int Ub(
const cvector &rv) noexcept {
return rv.u; }
802 #if(CXSC_INDEX_CHECK)
810 #if(CXSC_INDEX_CHECK)
820 #if(CXSC_INDEX_CHECK)
827 #if(CXSC_INDEX_CHECK)
832 operator void*() noexcept;
857 #ifdef _CXSC_FRIEND_TPL
861 template <
class VS1,
class VS2>
friend VS1 & _vsvsassign(VS1 &sl1,
const VS2 &sl2)
862 #if(CXSC_INDEX_CHECK)
868 template <
class V,
class VS,
class S>
friend V & _vvsassign(V &rv,
const VS &sl) noexcept;
870 template <
class VS,
class V>
friend VS & _vsvassign(VS &sl,
const V &rv)
871 #if(CXSC_INDEX_CHECK)
877 template <
class VS,
class S>
friend VS & _vssassign(VS &sl,
const S &r) noexcept;
879 template <
class DP,
class VS,
class V>
friend void _vsvaccu(DP &dp,
const VS & sl,
const V &rv)
880 #if(CXSC_INDEX_CHECK)
885 template <
class DP,
class VS1,
class VS2>
friend void _vsvsaccu(DP &dp,
const VS1 & sl1,
const VS2 &sl2)
886 #if(CXSC_INDEX_CHECK)
892 template <
class VS,
class S,
class E>
friend E _vssdiv(
const VS &sl,
const S &s) noexcept;
893 template <
class VS,
class S,
class E>
friend E _vssmult(
const VS &sl,
const S &s) noexcept;
895 template <
class VS,
class V,
class E>
friend E _vsvcmult(
const VS & sl,
const V &rv)
896 #if(CXSC_INDEX_CHECK)
901 template <
class VS,
class S>
friend VS &_vssmultassign(VS &rv,
const S &r) noexcept;
902 template <
class VS,
class S>
friend VS &_vssdivassign(VS &rv,
const S &r) noexcept;
903 template <
class V,
class VS,
class E>
friend E _vvsplus(
const V &rv,
const VS &sl)
904 #if(CXSC_INDEX_CHECK)
909 template <
class VS1,
class VS2,
class E>
friend E _vsvsplus(
const VS1 &s1,
const VS2 &s2)
910 #if(CXSC_INDEX_CHECK)
915 template <
class VS1,
class VS2,
class E>
friend E _vsvsminus(
const VS1 &s1,
const VS2 &s2)
916 #if(CXSC_INDEX_CHECK)
921 template <
class V,
class VS>
friend V &_vvsplusassign(V &rv,
const VS &sl)
922 #if(CXSC_INDEX_CHECK)
927 template <
class VS1,
class VS2>
friend VS1 &_vsvsplusassign(VS1 &sl1,
const VS2 &sl2)
928 #if(CXSC_INDEX_CHECK)
933 template <
class VS1,
class VS2>
friend VS1 &_vsvsminusassign(VS1 &sl1,
const VS2 &sl2)
934 #if(CXSC_INDEX_CHECK)
939 template <
class V,
class VS>
friend V &_vvsminusassign(V &rv,
const VS &sl)
940 #if(CXSC_INDEX_CHECK)
946 template <
class VS,
class V>
friend V _vsminus(
const VS &sl) noexcept;
948 template <
class V,
class VS,
class E>
friend E _vvsminus(
const V &rv,
const VS &sl)
949 #if(CXSC_INDEX_CHECK)
954 template <
class VS,
class V,
class E>
friend E _vsvminus(
const VS &sl,
const V &rv)
955 #if(CXSC_INDEX_CHECK)
960 template <
class V,
class VS,
class E>
friend E _vvsconv(
const V &rv,
const VS &sl)
961 #if(CXSC_INDEX_CHECK)
966 template <
class VS1,
class VS2,
class E>
friend E _vsvsconv(
const VS1 &s1,
const VS2 &s2)
967 #if(CXSC_INDEX_CHECK)
972 template <
class VS,
class V>
friend bool _vsveq(
const VS &sl,
const V &rv) noexcept;
973 template <
class VS,
class V>
friend bool _vsvneq(
const VS &sl,
const V &rv) noexcept;
974 template <
class VS,
class V>
friend bool _vsvless(
const VS &sl,
const V &rv) noexcept;
975 template <
class VS,
class V>
friend bool _vsvleq(
const VS &sl,
const V &rv) noexcept;
976 template <
class V,
class VS>
friend bool _vvsless(
const V &rv,
const VS &sl) noexcept;
977 template <
class V,
class VS>
friend bool _vvsleq(
const V &rv,
const VS &sl) noexcept;
978 template <
class VS,
class E>
friend E _vsconj(
const VS &sl) noexcept;
979 template <
class VS,
class E>
friend E _vsabs(
const VS &sl) noexcept;
981 template <
class VS1,
class VS2,
class E>
friend E _vsvscmult(
const VS1 & sl1,
const VS2 &sl2)
982 #if(CXSC_INDEX_CHECK)
988 template <
class VS1,
class VS2>
friend bool _vsvseq(
const VS1 &sl1,
const VS2 &sl2) noexcept;
989 template <
class VS1,
class VS2>
friend bool _vsvsneq(
const VS1 &sl1,
const VS2 &sl2) noexcept;
990 template <
class VS1,
class VS2>
friend bool _vsvsless(
const VS1 &sl1,
const VS2 &sl2) noexcept;
991 template <
class VS1,
class VS2>
friend bool _vsvsleq(
const VS1 &sl1,
const VS2 &sl2) noexcept;
992 template <
class VS>
friend bool _vsnot(
const VS &sl) noexcept;
993 template <
class VS>
friend void *_vsvoid(
const VS &sl) noexcept;
994 template <
class V>
friend std::ostream &_vsout(std::ostream &s,
const V &rv) noexcept;
995 template <
class V>
friend std::istream &_vsin(std::istream &s, V &rv) noexcept;
996 template <
class VS,
class E>
friend E _vsim(
const VS &sl) noexcept;
997 template <
class VS,
class E>
friend E _vsre(
const VS &sl) noexcept;
998 template <
class VS,
class V>
friend VS &_vsvsetim(VS &sl,
const V &rv)
999 #if(CXSC_INDEX_CHECK)
1004 template <
class VS,
class V>
friend VS &_vsvsetre(VS &sl,
const V &rv)
1005 #if(CXSC_INDEX_CHECK)
1010 template <
class VS1,
class VS2>
friend VS1 &_vsvssetim(VS1 &sl1,
const VS2 &sl2)
1011 #if(CXSC_INDEX_CHECK)
1016 template <
class VS1,
class VS2>
friend VS1 &_vsvssetre(VS1 &sl1,
const VS2 &sl2)
1017 #if(CXSC_INDEX_CHECK)
1033 template <
class VS,
class S>
friend VS &_vsssetim(VS &vs,
const S &s) noexcept;
1034 template <
class VS,
class S>
friend VS &_vsssetre(VS &vs,
const S &s) noexcept;
1036 template <
class VS,
class M,
class S>
friend VS &_vsmcmultassign(VS &v,
const M &m)
1037 #if(CXSC_INDEX_CHECK)
1044 template <
class VS,
class V>
friend VS &_vsvplusassign(VS &sl,
const V &rv)
1045 #if(CXSC_INDEX_CHECK)
1050 template <
class VS,
class V>
friend VS &_vsvminusassign(VS &sl,
const V &rv)
1051 #if(CXSC_INDEX_CHECK)
1056 template <
class V,
class MS,
class E>
friend E _vmscmult(
const V &v,
const MS &ms)
1057 #if(CXSC_INDEX_CHECK)
1063 template <
class V,
class VS,
class E>
friend E _vvssect(
const V &rv,
const VS &sl)
1064 #if(CXSC_INDEX_CHECK)
1069 template <
class VS1,
class VS2,
class E>
friend E _vsvssect(
const VS1 &s1,
const VS2 &s2)
1070 #if(CXSC_INDEX_CHECK)
1077 template <
class V1,
class V2,
class E>
friend E _vvcimult(
const V1 & rv1,
const V2 &rv2)
1078 #if(CXSC_INDEX_CHECK)
1083 template <
class VS,
class V,
class E>
friend E _vsvcimult(
const VS & sl,
const V &rv)
1084 #if(CXSC_INDEX_CHECK)
1089 template <
class VS1,
class VS2,
class E>
friend E _vsvscimult(
const VS1 & sl1,
const VS2 &sl2)
1090 #if(CXSC_INDEX_CHECK)
1095 template <
class V1,
class V2,
class E>
friend E _vvplus(
const V1 &rv1,
const V2 &rv2)
1096 #if(CXSC_INDEX_CHECK)
1101 template <
class V1,
class V2,
class E>
friend E _vvminus(
const V1 &rv1,
const V2 &rv2)
1102 #if(CXSC_INDEX_CHECK)
1125 template <
class V,
class VS>
friend V &_vvsconvassign(V &rv,
const VS &sl)
1126 #if(CXSC_INDEX_CHECK)
1131 template <
class V,
class VS>
friend V &_vvssectassign(V &rv,
const VS &sl)
1132 #if(CXSC_INDEX_CHECK)
1137 template <
class VS1,
class VS2>
friend VS1 &_vsvsconvassign(VS1 &sl1,
const VS2 &sl2)
1138 #if(CXSC_INDEX_CHECK)
1143 template <
class VS1,
class VS2>
friend VS1 &_vsvssectassign(VS1 &sl1,
const VS2 &sl2)
1144 #if(CXSC_INDEX_CHECK)
1153 explicit INLINE
cvector_slice(
cvector &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) { }
1155 explicit INLINE
cvector_slice(
cvector_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) { }
1168 #if(CXSC_INDEX_CHECK)
1175 #if(CXSC_INDEX_CHECK)
1184 #if(CXSC_INDEX_CHECK)
1191 #if(CXSC_INDEX_CHECK)
1206 #if(CXSC_INDEX_CHECK)
1212 #if(CXSC_INDEX_CHECK)
1221 #if(CXSC_INDEX_CHECK)
1228 #if(CXSC_INDEX_CHECK)
1237 template <
class V,
class VS>
friend V &_vvssetinf(V &rv,
const VS &sl)
1238 #if(CXSC_INDEX_CHECK)
1243 template <
class V,
class VS>
friend V &_vvssetsup(V &rv,
const VS &sl)
1244 #if(CXSC_INDEX_CHECK)
1249 template <
class V,
class VS>
friend V &_vvsusetinf(V &rv,
const VS &sl)
1250 #if(CXSC_INDEX_CHECK)
1255 template <
class V,
class VS>
friend V &_vvsusetsup(V &rv,
const VS &sl)
1256 #if(CXSC_INDEX_CHECK)
1261 template <
class VS1,
class VS2>
friend VS1 &_vsvssetinf(VS1 &sl1,
const VS2 &sl2)
1262 #if(CXSC_INDEX_CHECK)
1267 template <
class VS1,
class VS2>
friend VS1 &_vsvssetsup(VS1 &sl1,
const VS2 &sl2)
1268 #if(CXSC_INDEX_CHECK)
1273 template <
class VS1,
class VS2>
friend VS1 &_vsvsusetinf(VS1 &sl1,
const VS2 &sl2)
1274 #if(CXSC_INDEX_CHECK)
1279 template <
class VS1,
class VS2>
friend VS1 &_vsvsusetsup(VS1 &sl1,
const VS2 &sl2)
1280 #if(CXSC_INDEX_CHECK)
1287 template <
class V,
class MS,
class E>
friend E _vmscimult(
const V &v,
const MS &ms)
1288 #if(CXSC_INDEX_CHECK)
1298 #if(CXSC_INDEX_CHECK)
1311 #if(CXSC_INDEX_CHECK)
1319 #if(CXSC_INDEX_CHECK)
1329 #if(CXSC_INDEX_CHECK)
1336 #if(CXSC_INDEX_CHECK)
1350 #if(CXSC_INDEX_CHECK)
1357 #if(CXSC_INDEX_CHECK)
1366 #if(CXSC_INDEX_CHECK)
1373 #if(CXSC_INDEX_CHECK)
1380 #if(CXSC_INDEX_CHECK)
1387 #if(CXSC_INDEX_CHECK)
1394 #if(CXSC_INDEX_CHECK)
1401 #if(CXSC_INDEX_CHECK)
1408 #if(CXSC_INDEX_CHECK)
1415 #if(CXSC_INDEX_CHECK)
1423 #if(CXSC_INDEX_CHECK)
1430 #if(CXSC_INDEX_CHECK)
1437 #if(CXSC_INDEX_CHECK)
1444 #if(CXSC_INDEX_CHECK)
1451 #if(CXSC_INDEX_CHECK)
1458 #if(CXSC_INDEX_CHECK)
1465 #if(CXSC_INDEX_CHECK)
1472 #if(CXSC_INDEX_CHECK)
1477 INLINE
operator void*() noexcept;
1512 #if(CXSC_INDEX_CHECK)
1519 #if(CXSC_INDEX_CHECK)
1526 #if(CXSC_INDEX_CHECK)
1533 #if(CXSC_INDEX_CHECK)
1541 #if(CXSC_INDEX_CHECK)
1548 #if(CXSC_INDEX_CHECK)
1555 #if(CXSC_INDEX_CHECK)
1562 #if(CXSC_INDEX_CHECK)
1581 #if(CXSC_INDEX_CHECK)
1587 INLINE
void Resize(
cvector &rv,
const int &lb,
const int &ub)
1588 #if(CXSC_INDEX_CHECK)
1612 INLINE
bool operator !(
const cvector &rv) noexcept;
1676 INLINE std::ostream &operator <<(std::ostream &s,
const cvector &rv) noexcept;
1678 INLINE std::ostream &operator <<(std::ostream &o,
const cvector_slice &sl) noexcept;
1680 INLINE std::istream &operator >>(std::istream &s,
cvector &rv) noexcept;
1682 INLINE std::istream &operator >>(std::istream &s,
cvector_slice &rv) noexcept;
1694 #if(CXSC_INDEX_CHECK)
1705 #if(CXSC_INDEX_CHECK)
1716 #if(CXSC_INDEX_CHECK)
1727 #if(CXSC_INDEX_CHECK)
1738 #if(CXSC_INDEX_CHECK)
1749 #if(CXSC_INDEX_CHECK)
1760 #if(CXSC_INDEX_CHECK)
1771 #if(CXSC_INDEX_CHECK)
1778 #if(CXSC_INDEX_CHECK)
1785 #if(CXSC_INDEX_CHECK)
1792 #if(CXSC_INDEX_CHECK)
1799 #if(CXSC_INDEX_CHECK)
1806 #if(CXSC_INDEX_CHECK)
1813 #if(CXSC_INDEX_CHECK)
1822 #if(CXSC_INDEX_CHECK)
1829 #if(CXSC_INDEX_CHECK)
1836 #if(CXSC_INDEX_CHECK)
1843 #if(CXSC_INDEX_CHECK)
1856 #if(CXSC_INDEX_CHECK)
1863 #if(CXSC_INDEX_CHECK)
1870 #if(CXSC_INDEX_CHECK)
1877 #if(CXSC_INDEX_CHECK)
1884 #if(CXSC_INDEX_CHECK)
1891 #if(CXSC_INDEX_CHECK)
1903 #if(CXSC_INDEX_CHECK)
1910 #if(CXSC_INDEX_CHECK)
1917 #if(CXSC_INDEX_CHECK)
1924 #if(CXSC_INDEX_CHECK)
1931 #if(CXSC_INDEX_CHECK)
1938 #if(CXSC_INDEX_CHECK)
1945 INLINE
bool operator ==(
const cvector &rv1,
const cvector &rv2) noexcept;
1953 INLINE
bool operator !=(
const cvector &rv1,
const cvector &rv2) noexcept;
1982 #if(CXSC_INDEX_CHECK)
1994 #if(CXSC_INDEX_CHECK)
2005 #if(CXSC_INDEX_CHECK)
2016 #if(CXSC_INDEX_CHECK)
2027 #if(CXSC_INDEX_CHECK)
2038 #if(CXSC_INDEX_CHECK)
2049 #if(CXSC_INDEX_CHECK)
2060 #if(CXSC_INDEX_CHECK)
2071 #if(CXSC_INDEX_CHECK)
2082 #if(CXSC_INDEX_CHECK)
2093 #if(CXSC_INDEX_CHECK)
2104 #if(CXSC_INDEX_CHECK)
2115 #if(CXSC_INDEX_CHECK)
2126 #if(CXSC_INDEX_CHECK)
2137 #if(CXSC_INDEX_CHECK)
2148 #if(CXSC_INDEX_CHECK)
2159 #if(CXSC_INDEX_CHECK)
2170 #if(CXSC_INDEX_CHECK)
2181 #if(CXSC_INDEX_CHECK)
2188 #if(CXSC_INDEX_CHECK)
2195 #if(CXSC_INDEX_CHECK)
2202 #if(CXSC_INDEX_CHECK)
2209 #if(CXSC_INDEX_CHECK)
2216 #if(CXSC_INDEX_CHECK)
2223 #if(CXSC_INDEX_CHECK)
2230 #if(CXSC_INDEX_CHECK)
2237 #if(CXSC_INDEX_CHECK)
2244 #if(CXSC_INDEX_CHECK)
2251 #if(CXSC_INDEX_CHECK)
2258 #if(CXSC_INDEX_CHECK)
2265 #if(CXSC_INDEX_CHECK)
2272 #if(CXSC_INDEX_CHECK)
2279 #if(CXSC_INDEX_CHECK)
2286 #if(CXSC_INDEX_CHECK)
2293 #if(CXSC_INDEX_CHECK)
2300 #if(CXSC_INDEX_CHECK)
2307 #if(CXSC_INDEX_CHECK)
2314 #if(CXSC_INDEX_CHECK)
2321 #if(CXSC_INDEX_CHECK)
2328 #if(CXSC_INDEX_CHECK)
2335 #if(CXSC_INDEX_CHECK)
2342 #if(CXSC_INDEX_CHECK)
2349 #if(CXSC_INDEX_CHECK)
2356 #if(CXSC_INDEX_CHECK)
2364 #if(CXSC_INDEX_CHECK)
2371 #if(CXSC_INDEX_CHECK)
2378 #if(CXSC_INDEX_CHECK)
2385 #if(CXSC_INDEX_CHECK)
2393 #if(CXSC_INDEX_CHECK)
2400 #if(CXSC_INDEX_CHECK)
2407 #if(CXSC_INDEX_CHECK)
2414 #if(CXSC_INDEX_CHECK)
2422 #if(CXSC_INDEX_CHECK)
2429 #if(CXSC_INDEX_CHECK)
2436 #if(CXSC_INDEX_CHECK)
2443 #if(CXSC_INDEX_CHECK)
2451 #if(CXSC_INDEX_CHECK)
2458 #if(CXSC_INDEX_CHECK)
2465 #if(CXSC_INDEX_CHECK)
2472 #if(CXSC_INDEX_CHECK)
2480 #if(CXSC_INDEX_CHECK)
2487 #if(CXSC_INDEX_CHECK)
2495 #if(CXSC_INDEX_CHECK)
2502 #if(CXSC_INDEX_CHECK)
2509 #if(CXSC_INDEX_CHECK)
2516 #if(CXSC_INDEX_CHECK)
2524 #if(CXSC_INDEX_CHECK)
2531 #if(CXSC_INDEX_CHECK)
2538 #if(CXSC_INDEX_CHECK)
2545 #if(CXSC_INDEX_CHECK)
2552 #if(CXSC_INDEX_CHECK)
2559 #if(CXSC_INDEX_CHECK)
2567 #ifdef _CXSC_INCL_INL
2568 #include "vector.inl"
2569 #include "cvector.inl"
2572 #ifdef _CXSC_RMATRIX_HPP_INCLUDED
2573 # ifdef _CXSC_INCL_INL
2574 # include "cvecrmat.inl"
2576 # include "cvecrmat.hpp"
2580 #ifdef _CXSC_IMATRIX_HPP_INCLUDED
2581 # ifdef _CXSC_INCL_INL
2582 # include "cvecimat.inl"
2584 # include "cvecimat.hpp"
2588 #ifdef _CXSC_IVECTOR_HPP_INCLUDED
2589 # ifdef _CXSC_INCL_INL
2590 # include "iveccvec.inl"
2592 # include "iveccvec.hpp"
2596 #ifdef CXSC_USE_BLAS
2597 #define _CXSC_BLAS_CVECTOR
2598 #include "cxsc_blas.inl"
The Data Type cdotprecision.
The Data Type cidotprecision.
The Data Type cmatrix_slice.
The Data Type cmatrix_subv.
complex(void) noexcept
Constructor of class complex.
The Data Type cvector_slice.
friend int Ub(const cvector_slice &sl) noexcept
Returns the upper bound of the vector.
friend int Lb(const cvector_slice &sl) noexcept
Returns the lower bound of the vector.
cvector_slice(cvector &a, const int &lb, const int &ub) noexcept
Constructor of class cvector_slice.
cvector_slice(const cvector_slice &a) noexcept
Constructor of class cvector_slice.
cvector_slice & operator/=(const complex &r) noexcept
Implementation of division and allocation operation.
friend int VecLen(const cvector_slice &sl) noexcept
Returns the dimension of the vector.
cvector_slice & operator-=(const cvector &rv) noexcept
Implementation of subtraction and allocation operation.
cvector_slice & operator|=(const cvector &rv) noexcept
Allocates the convex hull of the arguments to the first argument.
cvector_slice & operator()() noexcept
Operator for accessing the whole vector.
cvector_slice(cvector_slice &a, const int &lb, const int &ub) noexcept
Constructor of class cvector_slice.
cvector_slice & operator+=(const cvector &rv) noexcept
Implementation of addition and allocation operation.
cvector_slice & operator&=(const cvector &rv) noexcept
Allocates the intersection of the arguments to the first argument.
cvector_slice & operator=(const scvector &sl)
Implementation of standard assigning operator.
cvector_slice & operator*=(const complex &r) noexcept
Implementation of multiplication and allocation operation.
complex & operator[](const int &i) const noexcept
Operator for accessing the single elements of the vector (read-only)
friend cvector & SetLb(cvector &rv, const int &l) noexcept
Sets the lower bound of the vector.
friend int Lb(const cvector &rv) noexcept
Returns the lower bound of the vector.
cvector() noexcept
Constructor of class cvector.
friend int VecLen(const cvector &rv) noexcept
Returns the dimension of the vector.
cvector & operator=(const cvector &rv) noexcept
Implementation of standard assigning operator.
friend int Ub(const cvector &rv) noexcept
Returns the upper bound of the vector.
cvector & operator()() noexcept
Operator for accessing the whole vector.
complex & operator[](const int &i) const noexcept
Operator for accessing the single elements of the vector (read-only)
friend cvector & SetUb(cvector &rv, const int &u) noexcept
Sets the upper bound of the vector.
The Data Type ivector_slice.
The Data Type rmatrix_slice.
The Data Type rmatrix_subv.
The Data Type rvector_slice.
Helper class for slices of sparse vectors.
Helper class for slices of sparse vectors.
The namespace cxsc, providing all functionality of the class library C-XSC.
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...
civector operator/(const cimatrix_subv &rv, const cinterval &s) noexcept
Implementation of division operation.
cdotprecision & operator+=(cdotprecision &cd, const l_complex &lc) noexcept
Implementation of standard algebraic addition and allocation 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.