-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathconvert-gsl.h
More file actions
47 lines (39 loc) · 1.37 KB
/
Copy pathconvert-gsl.h
File metadata and controls
47 lines (39 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef CONVERT_GSl_H
#define CONVERT_GSl_H
#include <gsl/gsl_vector.h>
#include <lvv/array.h>
template <typename T, int N, int B> lvv::array<T,N,B>&
operator<<= (lvv::array<T,N,B>& A, const gsl_vector* gV) { // operator= should be member, so we are using operator<<
assert(A.size()==gV->size); assert(A.ibegin()==0);
for (int i=A.ibegin(); i<A.iend(); i++) A[i] = gsl_vector_get(gV, i);
return A;
};
template <typename T, int N, int B> lvv::array<T,N,B>&
operator<< (lvv::array<T,N,B>& A, const gsl_vector* gV) { // operator= should be member, so we are using operator<<
assert(A.size()==gV->size);
for (int i=0; i<N; i++) A[i+B] = gsl_vector_get(gV, i);
return A;
};
template <typename T, int N, int B> gsl_vector*
operator<<= (gsl_vector* gV, lvv::array<T,N,B>& A) {
assert(A.size()==gV->size); assert(A.ibegin()==0);
for (int i=A.ibegin(); i<A.iend(); i++) gsl_vector_set(gV, i, A[i]);
return gV;
};
template <typename T, int N, int B> gsl_vector*
operator<< (gsl_vector* gV, lvv::array<T,N,B>& A) {
assert(A.size()==gV->size);
for (int i=0; i<N; i++) gsl_vector_set(gV, i, A[i+B]);
return gV;
};
// double[] to gsl_vector wrapper
struct mk_gsl_vector: public gsl_vector {
mk_gsl_vector(double *a, int n) {
size = n;
stride = 1;
data = a;
block = NULL;
owner = 0;
};
};
#endif