1 2 #ifndef BTL_C_INTERFACE_BASE_H 3 #define BTL_C_INTERFACE_BASE_H 4 5 #include "utilities.h" 6 #include <vector> 7 8 template<class real> class c_interface_base 9 { 10 11 public: 12 13 typedef real real_type; 14 typedef std::vector<real> stl_vector; 15 typedef std::vector<stl_vector > stl_matrix; 16 17 typedef real* gene_matrix; 18 typedef real* gene_vector; 19 free_matrix(gene_matrix & A,int)20 static void free_matrix(gene_matrix & A, int /*N*/){ 21 delete[] A; 22 } 23 free_vector(gene_vector & B)24 static void free_vector(gene_vector & B){ 25 delete[] B; 26 } 27 matrix_from_stl(gene_matrix & A,stl_matrix & A_stl)28 static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ 29 int N = A_stl.size(); 30 A = new real[N*N]; 31 for (int j=0;j<N;j++) 32 for (int i=0;i<N;i++) 33 A[i+N*j] = A_stl[j][i]; 34 } 35 vector_from_stl(gene_vector & B,stl_vector & B_stl)36 static inline void vector_from_stl(gene_vector & B, stl_vector & B_stl){ 37 int N = B_stl.size(); 38 B = new real[N]; 39 for (int i=0;i<N;i++) 40 B[i] = B_stl[i]; 41 } 42 vector_to_stl(gene_vector & B,stl_vector & B_stl)43 static inline void vector_to_stl(gene_vector & B, stl_vector & B_stl){ 44 int N = B_stl.size(); 45 for (int i=0;i<N;i++) 46 B_stl[i] = B[i]; 47 } 48 matrix_to_stl(gene_matrix & A,stl_matrix & A_stl)49 static inline void matrix_to_stl(gene_matrix & A, stl_matrix & A_stl){ 50 int N = A_stl.size(); 51 for (int j=0;j<N;j++){ 52 A_stl[j].resize(N); 53 for (int i=0;i<N;i++) 54 A_stl[j][i] = A[i+N*j]; 55 } 56 } 57 copy_vector(const gene_vector & source,gene_vector & cible,int N)58 static inline void copy_vector(const gene_vector & source, gene_vector & cible, int N){ 59 for (int i=0;i<N;i++) 60 cible[i]=source[i]; 61 } 62 copy_matrix(const gene_matrix & source,gene_matrix & cible,int N)63 static inline void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N){ 64 for (int j=0;j<N;j++){ 65 for (int i=0;i<N;i++){ 66 cible[i+N*j] = source[i+N*j]; 67 } 68 } 69 } 70 71 }; 72 73 #endif 74