37 #include <itpp/itexports.h>
43 template<
class Num_T>
class Vec;
45 template<
class Num_T>
class Mat;
55 Vec<Num_T>
operator+(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2);
58 Vec<Num_T>
operator+(
const Vec<Num_T> &v, Num_T t);
61 Vec<Num_T>
operator+(Num_T t,
const Vec<Num_T> &v);
65 Vec<Num_T>
operator-(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2);
68 Vec<Num_T>
operator-(
const Vec<Num_T> &v, Num_T t);
71 Vec<Num_T>
operator-(Num_T t,
const Vec<Num_T> &v);
74 Vec<Num_T>
operator-(
const Vec<Num_T> &v);
78 Num_T
dot(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2);
81 Num_T
operator*(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2);
91 Mat<Num_T>
outer_product(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2,
92 bool hermitian =
false);
95 Vec<Num_T>
operator*(
const Vec<Num_T> &v, Num_T t);
98 Vec<Num_T>
operator*(Num_T t,
const Vec<Num_T> &v);
101 template<
class Num_T>
102 Vec<Num_T>
elem_mult(
const Vec<Num_T> &a,
const Vec<Num_T> &b);
104 template<
class Num_T>
105 Vec<Num_T>
elem_mult(
const Vec<Num_T> &a,
const Vec<Num_T> &b,
106 const Vec<Num_T> &c);
108 template<
class Num_T>
109 Vec<Num_T>
elem_mult(
const Vec<Num_T> &a,
const Vec<Num_T> &b,
110 const Vec<Num_T> &c,
const Vec<Num_T> &d);
113 template<
class Num_T>
117 template<
class Num_T>
119 const Vec<Num_T> &c, Vec<Num_T> &out);
121 template<
class Num_T>
123 const Vec<Num_T> &c,
const Vec<Num_T> &d,
127 template<
class Num_T>
130 template<
class Num_T>
131 Num_T
elem_mult_sum(
const Vec<Num_T> &a,
const Vec<Num_T> &b);
134 template<
class Num_T>
135 Vec<Num_T>
operator/(
const Vec<Num_T> &v, Num_T t);
137 template<
class Num_T>
138 Vec<Num_T>
operator/(Num_T t,
const Vec<Num_T> &v);
141 template<
class Num_T>
142 Vec<Num_T>
elem_div(
const Vec<Num_T> &a,
const Vec<Num_T> &b);
144 template<
class Num_T>
145 Vec<Num_T>
elem_div(Num_T t,
const Vec<Num_T> &v);
147 template<
class Num_T>
148 void elem_div_out(
const Vec<Num_T> &a,
const Vec<Num_T> &b, Vec<Num_T> &out);
150 template<
class Num_T>
151 Num_T
elem_div_sum(
const Vec<Num_T> &a,
const Vec<Num_T> &b);
154 template<
class Num_T>
155 Vec<Num_T>
concat(
const Vec<Num_T> &v, Num_T a);
157 template<
class Num_T>
158 Vec<Num_T>
concat(Num_T a,
const Vec<Num_T> &v);
160 template<
class Num_T>
161 Vec<Num_T>
concat(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2);
163 template<
class Num_T>
164 Vec<Num_T>
concat(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2,
165 const Vec<Num_T> &v3);
167 template<
class Num_T>
168 Vec<Num_T>
concat(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2,
169 const Vec<Num_T> &v3,
const Vec<Num_T> &v4);
171 template<
class Num_T>
172 Vec<Num_T>
concat(
const Vec<Num_T> &v1,
const Vec<Num_T> &v2,
173 const Vec<Num_T> &v3,
const Vec<Num_T> &v4,
174 const Vec<Num_T> &v5);
243 template<
class Num_T>
284 void set(
const char *str);
286 void set(
const std::string &str);
304 const Num_T &
get(
int i)
const;
313 void set(
int i, Num_T t);
451 void del(
int i1,
int i2);
453 void ins(
int i, Num_T t);
510 std::vector<std::string> tokenize(
const std::string &str,
511 bool &abc_format)
const;
513 Num_T parse_token(
const std::string &s)
const;
515 void parse_abc_token(
const std::string &s, Num_T &a, Num_T &b,
518 bool in_range(
int i)
const {
return ((i <
datasize) && (i >= 0)); }
529 typedef Vec<double> vec;
535 typedef Vec<std::complex<double> > cvec;
541 typedef Vec<int> ivec;
547 typedef Vec<short int> svec;
553 typedef Vec<bin> bvec;
571 template<
class Num_T>
572 std::ostream &operator<<(std::ostream &os, const Vec<Num_T> &v);
585 template<
class Num_T>
586 std::istream &
operator>>(std::istream &is, Vec<Num_T> &v);
592 template<
class Num_T>
inline
605 template<
class Num_T>
inline
613 template<
class Num_T>
inline
616 template<
class Num_T>
inline
623 template<
class Num_T>
inline
630 template<
class Num_T>
inline
637 template<
class Num_T>
inline
640 set(std::string(str));
643 template<
class Num_T>
inline
649 template<
class Num_T>
inline
653 copy_vector(size, c_array,
data);
656 template<
class Num_T>
inline
662 template<
class Num_T>
665 it_assert_debug(size >= 0,
"Vec::set_size(): New size must not be negative");
666 if (datasize == size)
672 int old_datasize = datasize;
674 int min = datasize < size ? datasize :
size;
678 copy_vector(min, tmp, data);
680 for (
int i = min; i <
size; ++i)
691 template<
class Num_T>
inline
698 template<
class Num_T>
inline
704 template<
class Num_T>
inline
711 template<
class Num_T>
inline
717 template<
class Num_T>
inline
720 if (i1 == -1) i1 = datasize - 1;
721 if (i2 == -1) i2 = datasize - 1;
724 "Vec<>::operator()(i1, i2): Indexing out of range");
732 template<
class Num_T>
737 for (
int i = 0; i <
size; ++i) {
739 "Index i=" << i <<
" out of range");
740 temp(i) = data[indexlist(i)];
745 template<
class Num_T>
750 "Wrong size of binlist vector");
753 for (
int i = 0; i <
size; ++i)
754 if (binlist(i) ==
bin(1))
761 template<
class Num_T>
inline
767 template<
class Num_T>
inline
770 return (*
this)(i1, i2);
773 template<
class Num_T>
inline
776 return (*
this)(indexlist);
779 template<
class Num_T>
inline
782 return (*
this)(binlist);
785 template<
class Num_T>
inline
788 for (
int i = 0; i < datasize; i++)
792 template<
class Num_T>
inline
795 for (
int i = 0; i < datasize; i++)
799 template<
class Num_T>
inline
806 template<
class Num_T>
inline
809 it_error(
"Vec::set(): Only `double', `complex<double>', `int', "
810 "`short int' and `bin' types supported");
813 template<
class Num_T>
inline
816 set(std::string(str));
832 template<
class Num_T>
836 copy_vector(datasize, data, temp.
_data());
840 template<
class Num_T>
844 copy_vector(datasize, data, temp.
_data());
854 template<
class Num_T>
860 copy_vector(datasize, v.
data, data);
865 for (
int i = 0; i < datasize; i++)
866 data[i] += v.
data[i];
871 template<
class Num_T>
inline
874 for (
int i = 0;i < datasize;i++)
879 template<
class Num_T>
892 template<
class Num_T>
904 template<
class Num_T>
916 template<
class Num_T>
922 for (
int i = 0; i < v.
datasize; i++)
923 data[i] = -v.
data[i];
928 for (
int i = 0; i < datasize; i++)
929 data[i] -= v.
data[i];
934 template<
class Num_T>
inline
937 for (
int i = 0;i < datasize;i++)
942 template<
class Num_T>
955 template<
class Num_T>
967 template<
class Num_T>
979 template<
class Num_T>
991 template<
class Num_T>
inline
994 scal_vector(datasize, t, data);
998 template<
class Num_T>
inline
1004 template<
class Num_T>
1009 for (
int i = 0; i < v1.
length(); ++i)
1016 ITPP_EXPORT
double dot(
const vec &v1,
const vec &v2);
1020 template<
class Num_T>
1024 "Vec::outer_product:: Input vector of zero size");
1027 for (
int i = 0; i < v1.
length(); ++i) {
1028 for (
int j = 0; j < v2.
length(); ++j) {
1037 ITPP_EXPORT mat
outer_product(
const vec &v1,
const vec &v2,
bool);
1040 ITPP_EXPORT cmat
outer_product(
const cvec &v1,
const cvec &v2,
bool hermitian);
1043 template<
class Num_T>
1054 template<
class Num_T>
inline
1060 template<
class Num_T>
inline
1068 template<
class Num_T>
inline
1077 template<
class Num_T>
inline
1086 template<
class Num_T>
1090 "Vec<>::elem_mult_out(): Wrong sizes");
1092 for (
int i = 0; i < a.
datasize; i++)
1096 template<
class Num_T>
1101 "Vec<>::elem_mult_out(): Wrong sizes");
1103 for (
int i = 0; i < a.
datasize; i++)
1107 template<
class Num_T>
1113 "Vec<>::elem_mult_out(): Wrong sizes");
1115 for (
int i = 0; i < a.
datasize; i++)
1119 template<
class Num_T>
1126 "Vec<>::elem_mult_inplace(): Wrong sizes");
1127 for (
int i = 0; i < a.
datasize; i++)
1131 template<
class Num_T>
inline
1135 "Vec<>::elem_mult_sum(): Wrong sizes");
1137 for (
int i = 0; i < a.
datasize; i++)
1142 template<
class Num_T>
1154 template<
class Num_T>
1166 template<
class Num_T>
1169 it_warning(
"Vec<>::elem_div(Num_T, const Vec<Num_T> &): This function is "
1170 "deprecated and might be removed from future IT++ releases. "
1171 "Please use Vec<>::operator/(Num_T, const Vec<Num_T> &) "
1176 template<
class Num_T>
inline
1179 for (
int i = 0; i < datasize; ++i) {
1185 template<
class Num_T>
inline
1189 for (
int i = 0; i < datasize; ++i) {
1190 data[i] /= v.
data[i];
1195 template<
class Num_T>
inline
1203 template<
class Num_T>
1210 for (
int i = 0; i < a.
datasize; i++)
1214 template<
class Num_T>
inline
1221 for (
int i = 0; i < a.
datasize; i++)
1227 template<
class Num_T>
1233 copy_vector(nr, &data[datasize-nr], temp.
data);
1238 template<
class Num_T>
1244 copy_vector(nr, data, temp.
data);
1249 template<
class Num_T>
1253 "Vec::mid(): indexing out of range");
1256 copy_vector(nr, &data[start], temp.
data);
1261 template<
class Num_T>
1265 "Vec<>::split(): Index out of range");
1268 copy_vector(pos, data, temp1.
data);
1269 if (pos < datasize) {
1271 copy_vector(datasize - pos, &data[pos], temp2.
data);
1281 template<
class Num_T>
1288 data[i] = data[i-n];
1293 template<
class Num_T>
1296 for (
int i = datasize - 1; i >= v.
datasize; i--)
1298 for (
int i = 0; i < v.
datasize; i++)
1302 template<
class Num_T>
1308 for (i = 0; i < datasize - n; i++)
1309 data[i] = data[i+n];
1310 while (i < datasize)
1314 template<
class Num_T>
1317 for (
int i = 0; i < datasize - v.
datasize; i++)
1319 for (
int i = datasize - v.
datasize; i < datasize; i++)
1320 data[i] = v[i-datasize+v.
datasize];
1323 template<
class Num_T>
1328 copy_vector(size, v.
data, temp.
data);
1333 template<
class Num_T>
1339 copy_vector(size, v.
data, &temp.
data[1]);
1343 template<
class Num_T>
1346 int size1 = v1.
size();
1347 int size2 = v2.
size();
1349 copy_vector(size1, v1.
data, temp.
data);
1350 copy_vector(size2, v2.
data, &temp.
data[size1]);
1354 template<
class Num_T>
1358 int size1 = v1.
size();
1359 int size2 = v2.
size();
1360 int size3 = v3.
size();
1362 copy_vector(size1, v1.
data, temp.
data);
1363 copy_vector(size2, v2.
data, &temp.
data[size1]);
1364 copy_vector(size3, v3.
data, &temp.
data[size1+size2]);
1368 template<
class Num_T>
1372 int size1 = v1.
size();
1373 int size2 = v2.
size();
1374 int size3 = v3.
size();
1375 int size4 = v4.
size();
1376 Vec<Num_T> temp(size1 + size2 + size3 + size4);
1377 copy_vector(size1, v1.
data, temp.
data);
1378 copy_vector(size2, v2.
data, &temp.
data[size1]);
1379 copy_vector(size3, v3.
data, &temp.
data[size1+size2]);
1380 copy_vector(size4, v4.
data, &temp.
data[size1+size2+size3]);
1384 template<
class Num_T>
1389 int size1 = v1.
size();
1390 int size2 = v2.
size();
1391 int size3 = v3.
size();
1392 int size4 = v4.
size();
1393 int size5 = v5.
size();
1394 Vec<Num_T> temp(size1 + size2 + size3 + size4 + size5);
1395 copy_vector(size1, v1.
data, temp.
data);
1396 copy_vector(size2, v2.
data, &temp.
data[size1]);
1397 copy_vector(size3, v3.
data, &temp.
data[size1+size2]);
1398 copy_vector(size4, v4.
data, &temp.
data[size1+size2+size3]);
1399 copy_vector(size5, v5.
data, &temp.
data[size1+size2+size3+size4]);
1403 template<
class Num_T>
1406 it_warning(
"Vec<>::set_subvector(int, int, const Vec<> &): This function "
1407 "is deprecated and might be removed from future IT++ releases. "
1408 "Please use Vec<>::set_subvector(int, const Vec<> &) instead.");
1409 set_subvector(i1, v);
1412 template<
class Num_T>
inline
1416 "Vec<>::set_subvector(int, const Vec<> &): "
1417 "Index out of range or too long input vector");
1421 template<
class Num_T>
inline
1424 if (i1 == -1) i1 = datasize - 1;
1425 if (i2 == -1) i2 = datasize - 1;
1427 "Vec<>::set_subvector(int, int, Num_T): Indexing out "
1429 for (
int i = i1; i <= i2; i++)
1433 template<
class Num_T>
inline
1436 set_subvector(i, v);
1439 template<
class Num_T>
1442 it_assert_debug(in_range(index),
"Vec<>::del(int): Index out of range");
1444 set_size(datasize - 1,
false);
1445 copy_vector(index, temp.
data, data);
1446 copy_vector(datasize - index, &temp.
data[index+1], &data[index]);
1449 template<
class Num_T>
1452 if (i1 == -1) i1 = datasize - 1;
1453 if (i2 == -1) i2 = datasize - 1;
1455 "Vec<>::del(int, int): Indexing out of range");
1457 int new_size = datasize - (i2 - i1 + 1);
1458 set_size(new_size,
false);
1459 copy_vector(i1, temp.
data, data);
1460 copy_vector(datasize - i1, &temp.
data[i2+1], &data[i1]);
1463 template<
class Num_T>
1467 "Vec<>::ins(): Index out of range");
1470 set_size(datasize + 1,
false);
1471 copy_vector(index, Temp.
data, data);
1473 copy_vector(Temp.
datasize - index, Temp.
data + index, data + index + 1);
1476 template<
class Num_T>
1480 "Vec<>::ins(): Index out of range");
1483 set_size(datasize + v.
length(),
false);
1484 copy_vector(index, Temp.
data, data);
1485 copy_vector(v.
size(), v.
data, &data[index]);
1486 copy_vector(Temp.
datasize - index, Temp.
data + index, data + index + v.
size());
1489 template<
class Num_T>
inline
1492 for (
int i = 0;i < datasize;i++)
1497 template<
class Num_T>
inline
1502 copy_vector(datasize, v.
data, data);
1507 template<
class Num_T>
1510 if (m.
cols() == 1) {
1511 set_size(m.
rows(),
false);
1514 else if (m.
rows() == 1) {
1515 set_size(m.
cols(),
false);
1519 it_error(
"Vec<>::operator=(Mat<Num_T> &): Wrong size of input matrix");
1523 template<
class Num_T>
inline
1526 set(std::string(str));
1530 template<
class Num_T>
inline
1537 template<
class Num_T>
1541 bvec temp(datasize);
1542 for (
int i = 0; i < datasize; i++)
1543 temp(i) = (data[i] == t);
1547 template<
class Num_T>
1551 bvec temp(datasize);
1552 for (
int i = 0; i < datasize; i++)
1553 temp(i) = (data[i] != t);
1562 template<
class Num_T>
1566 bvec temp(datasize);
1567 for (
int i = 0; i < datasize; i++)
1568 temp(i) = (data[i] < t);
1572 template<
class Num_T>
1576 bvec temp(datasize);
1577 for (
int i = 0; i < datasize; i++)
1578 temp(i) = (data[i] <= t);
1587 template<
class Num_T>
1591 bvec temp(datasize);
1592 for (
int i = 0; i < datasize; i++)
1593 temp(i) = (data[i] > t);
1602 template<
class Num_T>
1606 bvec temp(datasize);
1607 for (
int i = 0; i < datasize; i++)
1608 temp(i) = (data[i] >= t);
1617 template<
class Num_T>
1621 if (datasize != invector.
datasize)
return false;
1622 for (
int i = 0;i < datasize;i++) {
1623 if (data[i] != invector.
data[i])
return false;
1628 template<
class Num_T>
1631 if (datasize != invector.
datasize)
return true;
1632 for (
int i = 0;i < datasize;i++) {
1633 if (data[i] != invector.
data[i])
return true;
1639 template<
class Num_T>
1640 std::ostream &operator<<(std::ostream &os, const Vec<Num_T> &v)
1642 int i, sz = v.length();
1645 for (i = 0; i < sz; i++) {
1656 template<
class Num_T>
1659 std::ostringstream buffer;
1660 bool started =
false;
1661 bool finished =
false;
1662 bool brackets =
false;
1672 if (is.eof() || (c ==
'\n')) {
1675 is.setstate(std::ios_base::failbit);
1678 else if (!((c ==
'\n') && !started)) {
1682 else if ((c ==
' ') || (c ==
'\t')) {
1687 else if (c ==
'[') {
1690 is.setstate(std::ios_base::failbit);
1698 else if (c ==
']') {
1699 if (!started || !brackets) {
1701 is.setstate(std::ios_base::failbit);
1707 while (!is.eof() && (((c =
static_cast<char>(is.peek())) ==
' ')
1711 if (!is.eof() && (c ==
'\n')) {
1726 v.
set(buffer.str());
1738 template<
class Num_T>
1739 void Vec<Num_T>::parse_abc_token(
const std::string &s, Num_T &a, Num_T &b,
1742 std::string::size_type beg = 0;
1743 std::string::size_type end = s.find(
':', 0);
1744 a = parse_token(s.substr(beg, end-beg));
1746 end = s.find(
':', beg);
1747 if (end != std::string::npos) {
1748 b = parse_token(s.substr(beg, end-beg));
1749 c = parse_token(s.substr(end+1, s.size()-end));
1753 c = parse_token(s.substr(beg, end-beg-1));
1757 template<
class Num_T>
1758 Num_T Vec<Num_T>::parse_token(
const std::string &s)
const
1760 it_error(
"Vec::parse_token(): Only `double' and `int' types are supported");
1766 ITPP_EXPORT
double Vec<double>::parse_token(
const std::string &s)
const;
1768 ITPP_EXPORT
int Vec<int>::parse_token(
const std::string &s)
const;
1771 template<
class Num_T>
1772 std::vector<std::string> Vec<Num_T>::tokenize(
const std::string &str_in,
1773 bool &abc_format)
const
1775 std::vector<std::string> vs;
1781 bool lparen =
false;
1783 for (std::string::size_type i = 0; i < str_in.size(); ++i) {
1786 case ' ':
case '\t':
1812 else if (lparen && comma) {
1816 if ((c !=
'-') && (c !=
'+'))
1839 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT Vec<double>;
1840 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT Vec<int>;
1841 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT Vec<short int>;
1842 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT Vec<std::complex<double> >;
1843 ITPP_EXPORT_TEMPLATE
template class ITPP_EXPORT Vec<bin>;
1847 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator+(
const vec &v1,
const vec &v2);
1848 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator+(
const cvec &v1,
const cvec &v2);
1849 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator+(
const ivec &v1,
const ivec &v2);
1850 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator+(
const svec &v1,
const svec &v2);
1851 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator+(
const bvec &v1,
const bvec &v2);
1853 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator+(
const vec &v1,
double t);
1854 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator+(
const cvec &v1, std::complex<double> t);
1855 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator+(
const ivec &v1,
int t);
1856 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator+(
const svec &v1,
short t);
1857 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator+(
const bvec &v1, bin t);
1859 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator+(
double t,
const vec &v1);
1860 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator+(std::complex<double> t,
const cvec &v1);
1861 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator+(
int t,
const ivec &v1);
1862 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator+(
short t,
const svec &v1);
1863 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator+(bin t,
const bvec &v1);
1867 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator-(
const vec &v1,
const vec &v2);
1868 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator-(
const cvec &v1,
const cvec &v2);
1869 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator-(
const ivec &v1,
const ivec &v2);
1870 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator-(
const svec &v1,
const svec &v2);
1871 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator-(
const bvec &v1,
const bvec &v2);
1873 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator-(
const vec &v,
double t);
1874 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator-(
const cvec &v, std::complex<double> t);
1875 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator-(
const ivec &v,
int t);
1876 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator-(
const svec &v,
short t);
1877 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator-(
const bvec &v, bin t);
1879 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator-(
double t,
const vec &v);
1880 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator-(std::complex<double> t,
const cvec &v);
1881 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator-(
int t,
const ivec &v);
1882 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator-(
short t,
const svec &v);
1883 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator-(bin t,
const bvec &v);
1887 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator-(
const vec &v);
1888 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator-(
const cvec &v);
1889 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator-(
const ivec &v);
1890 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator-(
const svec &v);
1891 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator-(
const bvec &v);
1894 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::complex<double>
dot(
const cvec &v1,
const cvec &v2);
1895 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
int dot(
const ivec &v1,
const ivec &v2);
1896 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
short dot(
const svec &v1,
const svec &v2);
1897 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bin
dot(
const bvec &v1,
const bvec &v2);
1899 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
double operator*(
const vec &v1,
const vec &v2);
1900 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::complex<double>
operator*(
const cvec &v1,
const cvec &v2);
1901 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
int operator*(
const ivec &v1,
const ivec &v2);
1902 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
short operator*(
const svec &v1,
const svec &v2);
1903 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bin
operator*(
const bvec &v1,
const bvec &v2);
1905 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT imat
outer_product(
const ivec &v1,
const ivec &v2,
1907 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT smat
outer_product(
const svec &v1,
const svec &v2,
1909 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
bmat outer_product(
const bvec &v1,
const bvec &v2,
1912 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator*(
const vec &v,
double t);
1913 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator*(
const cvec &v, std::complex<double> t);
1914 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator*(
const ivec &v,
int t);
1915 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator*(
const svec &v,
short t);
1916 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator*(
const bvec &v, bin t);
1918 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator*(
double t,
const vec &v);
1919 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator*(std::complex<double> t,
const cvec &v);
1920 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator*(
int t,
const ivec &v);
1921 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator*(
short t,
const svec &v);
1922 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator*(bin t,
const bvec &v);
1926 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
elem_mult(
const vec &a,
const vec &b);
1927 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
elem_mult(
const cvec &a,
const cvec &b);
1928 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
elem_mult(
const ivec &a,
const ivec &b);
1929 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
elem_mult(
const svec &a,
const svec &b);
1930 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
elem_mult(
const bvec &a,
const bvec &b);
1932 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const vec &a,
const vec &b, vec &out);
1933 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const cvec &a,
const cvec &b, cvec &out);
1934 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const ivec &a,
const ivec &b, ivec &out);
1935 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const svec &a,
const svec &b, svec &out);
1936 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const bvec &a,
const bvec &b, bvec &out);
1938 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
elem_mult(
const vec &a,
const vec &b,
const vec &c);
1939 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
elem_mult(
const cvec &a,
const cvec &b,
const cvec &c);
1940 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
elem_mult(
const ivec &a,
const ivec &b,
const ivec &c);
1941 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
elem_mult(
const svec &a,
const svec &b,
const svec &c);
1942 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
elem_mult(
const bvec &a,
const bvec &b,
const bvec &c);
1944 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const vec &a,
const vec &b,
1945 const vec &c, vec &out);
1946 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const cvec &a,
const cvec &b,
1947 const cvec &c, cvec &out);
1948 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const ivec &a,
const ivec &b,
1949 const ivec &c, ivec &out);
1950 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const svec &a,
const svec &b,
1951 const svec &c, svec &out);
1952 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const bvec &a,
const bvec &b,
1953 const bvec &c, bvec &out);
1955 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
elem_mult(
const vec &a,
const vec &b,
1956 const vec &c,
const vec &d);
1957 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
elem_mult(
const cvec &a,
const cvec &b,
1958 const cvec &c,
const cvec &d);
1959 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
elem_mult(
const ivec &a,
const ivec &b,
1960 const ivec &c,
const ivec &d);
1961 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
elem_mult(
const svec &a,
const svec &b,
1962 const svec &c,
const svec &d);
1963 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
elem_mult(
const bvec &a,
const bvec &b,
1964 const bvec &c,
const bvec &d);
1966 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const vec &a,
const vec &b,
const vec &c,
1967 const vec &d, vec &out);
1968 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const cvec &a,
const cvec &b,
1969 const cvec &c,
const cvec &d, cvec &out);
1970 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const ivec &a,
const ivec &b,
1971 const ivec &c,
const ivec &d, ivec &out);
1972 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const svec &a,
const svec &b,
1973 const svec &c,
const svec &d, svec &out);
1974 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_out(
const bvec &a,
const bvec &b,
1975 const bvec &c,
const bvec &d, bvec &out);
1979 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_inplace(
const vec &a, vec &b);
1980 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_inplace(
const cvec &a, cvec &b);
1981 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_inplace(
const ivec &a, ivec &b);
1982 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_inplace(
const svec &a, svec &b);
1983 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_mult_inplace(
const bvec &a, bvec &b);
1987 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
double elem_mult_sum(
const vec &a,
const vec &b);
1988 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::complex<double>
elem_mult_sum(
const cvec &a,
1990 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
int elem_mult_sum(
const ivec &a,
const ivec &b);
1991 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
short elem_mult_sum(
const svec &a,
const svec &b);
1992 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bin
elem_mult_sum(
const bvec &a,
const bvec &b);
1996 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator/(
const vec &v,
double t);
1997 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator/(
const cvec &v, std::complex<double> t);
1998 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator/(
const ivec &v,
int t);
1999 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator/(
const svec &v,
short t);
2000 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator/(
const bvec &v, bin t);
2002 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
operator/(
double t,
const vec &v);
2003 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
operator/(std::complex<double> t,
const cvec &v);
2004 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
operator/(
int t,
const ivec &v);
2005 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
operator/(
short t,
const svec &v);
2006 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
operator/(bin t,
const bvec &v);
2010 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
elem_div(
const vec &a,
const vec &b);
2011 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
elem_div(
const cvec &a,
const cvec &b);
2012 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
elem_div(
const ivec &a,
const ivec &b);
2013 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
elem_div(
const svec &a,
const svec &b);
2014 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
elem_div(
const bvec &a,
const bvec &b);
2016 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
elem_div(
double t,
const vec &v);
2017 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
elem_div(std::complex<double> t,
const cvec &v);
2018 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
elem_div(
int t,
const ivec &v);
2019 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
elem_div(
short t,
const svec &v);
2020 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
elem_div(bin t,
const bvec &v);
2022 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_div_out(
const vec &a,
const vec &b, vec &out);
2023 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_div_out(
const cvec &a,
const cvec &b, cvec &out);
2024 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_div_out(
const ivec &a,
const ivec &b, ivec &out);
2025 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_div_out(
const svec &a,
const svec &b, svec &out);
2026 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
void elem_div_out(
const bvec &a,
const bvec &b, bvec &out);
2030 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
double elem_div_sum(
const vec &a,
const vec &b);
2031 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::complex<double>
elem_div_sum(
const cvec &a,
2033 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
int elem_div_sum(
const ivec &a,
const ivec &b);
2034 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT
short elem_div_sum(
const svec &a,
const svec &b);
2035 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bin
elem_div_sum(
const bvec &a,
const bvec &b);
2039 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
concat(
const vec &v,
double a);
2040 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
concat(
const cvec &v, std::complex<double> a);
2041 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
concat(
const ivec &v,
int a);
2042 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
concat(
const svec &v,
short a);
2043 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
concat(
const bvec &v, bin a);
2045 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
concat(
double a,
const vec &v);
2046 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
concat(std::complex<double> a,
const cvec &v);
2047 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
concat(
int a,
const ivec &v);
2048 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
concat(
short a,
const svec &v);
2049 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
concat(bin a,
const bvec &v);
2051 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
concat(
const vec &v1,
const vec &v2);
2052 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
concat(
const cvec &v1,
const cvec &v2);
2053 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
concat(
const ivec &v1,
const ivec &v2);
2054 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
concat(
const svec &v1,
const svec &v2);
2055 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
concat(
const bvec &v1,
const bvec &v2);
2057 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
concat(
const vec &v1,
const vec &v2,
const vec &v3);
2058 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
concat(
const cvec &v1,
const cvec &v2,
const cvec &v3);
2059 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
concat(
const ivec &v1,
const ivec &v2,
const ivec &v3);
2060 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
concat(
const svec &v1,
const svec &v2,
const svec &v3);
2061 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
concat(
const bvec &v1,
const bvec &v2,
const bvec &v3);
2063 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
concat(
const vec &v1,
const vec &v2,
2064 const vec &v3,
const vec &v4);
2065 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
concat(
const cvec &v1,
const cvec &v2,
2066 const cvec &v3,
const cvec &v4);
2067 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
concat(
const ivec &v1,
const ivec &v2,
2068 const ivec &v3,
const ivec &v4);
2069 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
concat(
const svec &v1,
const svec &v2,
2070 const svec &v3,
const svec &v4);
2071 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
concat(
const bvec &v1,
const bvec &v2,
2072 const bvec &v3,
const bvec &v4);
2074 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT vec
concat(
const vec &v1,
const vec &v2,
const vec &v3,
2075 const vec &v4,
const vec &v5);
2076 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT cvec
concat(
const cvec &v1,
const cvec &v2,
const cvec &v3,
2077 const cvec &v4,
const cvec &v5);
2078 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT ivec
concat(
const ivec &v1,
const ivec &v2,
const ivec &v3,
2079 const ivec &v4,
const ivec &v5);
2080 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT svec
concat(
const svec &v1,
const svec &v2,
const svec &v3,
2081 const svec &v4,
const svec &v5);
2082 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT bvec
concat(
const bvec &v1,
const bvec &v2,
const bvec &v3,
2083 const bvec &v4,
const bvec &v5);
2087 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::ostream &
operator<<(std::ostream& os,
const vec &vect);
2088 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::ostream &
operator<<(std::ostream& os,
const cvec &vect);
2089 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::ostream &
operator<<(std::ostream& os,
const svec &vect);
2090 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::ostream &
operator<<(std::ostream& os,
const ivec &vect);
2091 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::ostream &
operator<<(std::ostream& os,
const bvec &vect);
2092 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::istream &
operator>>(std::istream& is, vec &vect);
2093 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::istream &
operator>>(std::istream& is, cvec &vect);
2094 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::istream &
operator>>(std::istream& is, svec &vect);
2095 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::istream &
operator>>(std::istream& is, ivec &vect);
2096 ITPP_EXPORT_TEMPLATE
template ITPP_EXPORT std::istream &
operator>>(std::istream& is, bvec &vect);
2102 #endif // #ifndef VEC_H