IT++ Logo
copy_vector.cpp
Go to the documentation of this file.
1
30
31#ifndef _MSC_VER
32# include <itpp/config.h>
33#else
34# include <itpp/config_msvc.h>
35#endif
36
37#if defined (HAVE_BLAS)
38# include <itpp/base/blas.h>
39#endif
40
41
42namespace itpp
43{
44
45#if defined (HAVE_BLAS)
46void copy_vector(int n, const double *x, double *y)
47{
48 int incr = 1;
49 blas::dcopy_(&n, x, &incr, y, &incr);
50}
51void copy_vector(int n, const std::complex<double> *x, std::complex<double> *y)
52{
53 int incr = 1;
54 blas::zcopy_(&n, x, &incr, y, &incr);
55}
56#else
57void copy_vector(int n, const double *x, double *y)
58{
59 memcpy(y, x, static_cast<unsigned int>(n) * sizeof(double));
60}
61void copy_vector(int n, const std::complex<double> *x, std::complex<double> *y)
62{
63 memcpy(y, x, static_cast<unsigned int>(n) * sizeof(std::complex<double>));
64}
65#endif
66
67
68#if defined (HAVE_BLAS)
69void copy_vector(int n, const double *x, int incx, double *y, int incy)
70{
71 blas::dcopy_(&n, x, &incx, y, &incy);
72}
73void copy_vector(int n, const std::complex<double> *x, int incx,
74 std::complex<double> *y, int incy)
75{
76 blas::zcopy_(&n, x, &incx, y, &incy);
77}
78#else
79void copy_vector(int n, const double *x, int incx, double *y, int incy)
80{
81 for (int i = 0; i < n; i++)
82 y[i*incy] = x[i*incx];
83}
84void copy_vector(int n, const std::complex<double> *x, int incx,
85 std::complex<double> *y, int incy)
86{
87 for (int i = 0; i < n; i++)
88 y[i*incy] = x[i*incx];
89}
90#endif
91
92
93#if defined (HAVE_BLAS)
94void swap_vector(int n, double *x, double *y)
95{
96 int incr = 1;
97 blas::dswap_(&n, x, &incr, y, &incr);
98}
99void swap_vector(int n, std::complex<double> *x, std::complex<double> *y)
100{
101 int incr = 1;
102 blas::zswap_(&n, x, &incr, y, &incr);
103}
104#else
105void swap_vector(int n, double *x, double *y)
106{
107 for (int i = 0; i < n; i++)
108 std::swap(x[i], y[i]);
109}
110void swap_vector(int n, std::complex<double> *x, std::complex<double> *y)
111{
112 for (int i = 0; i < n; i++)
113 std::swap(x[i], y[i]);
114}
115#endif
116
117
118#if defined (HAVE_BLAS)
119void swap_vector(int n, double *x, int incx, double *y, int incy)
120{
121 blas::dswap_(&n, x, &incx, y, &incy);
122}
123void swap_vector(int n, std::complex<double> *x, int incx,
124 std::complex<double> *y, int incy)
125{
126 blas::zswap_(&n, x, &incx, y, &incy);
127}
128#else
129void swap_vector(int n, double *x, int incx, double *y, int incy)
130{
131 for (int i = 0; i < n; i++)
132 std::swap(x[i*incx], y[i*incy]);
133}
134void swap_vector(int n, std::complex<double> *x, int incx,
135 std::complex<double> *y, int incy)
136{
137 for (int i = 0; i < n; i++)
138 std::swap(x[i*incx], y[i*incy]);
139}
140#endif
141
142
143#if defined(HAVE_BLAS)
144void scal_vector(int n, double alpha, double *x)
145{
146 int incr = 1;
147 blas::dscal_(&n, &alpha, x, &incr);
148}
149void scal_vector(int n, std::complex<double> alpha, std::complex<double> *x)
150{
151 int incr = 1;
152 blas::zscal_(&n, &alpha, x, &incr);
153}
154#else
155void scal_vector(int n, double alpha, double *x)
156{
157 if (alpha != 1.0) {
158 for (int i = 0; i < n; ++i) {
159 x[i] *= alpha;
160 }
161 }
162}
163void scal_vector(int n, std::complex<double> alpha, std::complex<double> *x)
164{
165 if (alpha != std::complex<double>(1.0)) {
166 for (int i = 0; i < n; ++i) {
167 x[i] *= alpha;
168 }
169 }
170}
171#endif
172
173
174#if defined(HAVE_BLAS)
175void scal_vector(int n, double alpha, double *x, int incx)
176{
177 blas::dscal_(&n, &alpha, x, &incx);
178}
179void scal_vector(int n, std::complex<double> alpha, std::complex<double> *x,
180 int incx)
181{
182 blas::zscal_(&n, &alpha, x, &incx);
183}
184#else
185void scal_vector(int n, double alpha, double *x, int incx)
186{
187 if (alpha != 1.0) {
188 for (int i = 0; i < n; ++i) {
189 x[i*incx] *= alpha;
190 }
191 }
192}
193void scal_vector(int n, std::complex<double> alpha, std::complex<double> *x,
194 int incx)
195{
196 if (alpha != std::complex<double>(1.0)) {
197 for (int i = 0; i < n; ++i) {
198 x[i*incx] *= alpha;
199 }
200 }
201}
202#endif
203
204
205#if defined(HAVE_BLAS)
206void axpy_vector(int n, double alpha, const double *x, double *y)
207{
208 int incr = 1;
209 blas::daxpy_(&n, &alpha, x, &incr, y, &incr);
210}
211void axpy_vector(int n, std::complex<double> alpha,
212 const std::complex<double> *x, std::complex<double> *y)
213{
214 int incr = 1;
215 blas::zaxpy_(&n, &alpha, x, &incr, y, &incr);
216}
217#else
218void axpy_vector(int n, double alpha, const double *x, double *y)
219{
220 if (alpha != 1.0) {
221 for (int i = 0; i < n; ++i) {
222 y[i] += alpha * x[i];
223 }
224 }
225 else {
226 for (int i = 0; i < n; ++i) {
227 y[i] += x[i];
228 }
229 }
230}
231void axpy_vector(int n, std::complex<double> alpha,
232 const std::complex<double> *x, std::complex<double> *y)
233{
234 if (alpha != std::complex<double>(1.0)) {
235 for (int i = 0; i < n; ++i) {
236 y[i] += alpha * x[i];
237 }
238 }
239 else {
240 for (int i = 0; i < n; ++i) {
241 y[i] += x[i];
242 }
243 }
244}
245#endif
246
247
248#if defined(HAVE_BLAS)
249void axpy_vector(int n, double alpha, const double *x, int incx, double *y,
250 int incy)
251{
252 blas::daxpy_(&n, &alpha, x, &incx, y, &incy);
253}
254void axpy_vector(int n, std::complex<double> alpha,
255 const std::complex<double> *x, int incx,
256 std::complex<double> *y, int incy)
257{
258 blas::zaxpy_(&n, &alpha, x, &incx, y, &incy);
259}
260#else
261void axpy_vector(int n, double alpha, const double *x, int incx, double *y,
262 int incy)
263{
264 if (alpha != 1.0) {
265 for (int i = 0; i < n; ++i) {
266 y[i*incy] += alpha * x[i*incx];
267 }
268 }
269 else {
270 for (int i = 0; i < n; ++i) {
271 y[i*incy] += x[i*incx];
272 }
273 }
274}
275void axpy_vector(int n, std::complex<double> alpha,
276 const std::complex<double> *x, int incx,
277 std::complex<double> *y, int incy)
278{
279 if (alpha != std::complex<double>(1.0)) {
280 for (int i = 0; i < n; ++i) {
281 y[i*incy] += alpha * x[i*incx];
282 }
283 }
284 else {
285 for (int i = 0; i < n; ++i) {
286 y[i*incy] += x[i*incx];
287 }
288 }
289}
290#endif
291
292} // namespace itpp
Vector copy functions for internal use.
itpp namespace
Definition itmex.h:37
SourceForge Logo

Generated on Mon Apr 7 2025 07:53:18 for IT++ by Doxygen 1.11.0