c_interface_base.h revision c981c48f5bc9aefeffc0bcb0cc3934c2fae179dd
1
2#ifndef BTL_C_INTERFACE_BASE_H
3#define BTL_C_INTERFACE_BASE_H
4
5#include "utilities.h"
6#include <vector>
7
8template<class real> class c_interface_base
9{
10
11public:
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
20  static void free_matrix(gene_matrix & A, int N){
21    delete A;
22  }
23
24  static void free_vector(gene_vector & B){
25    delete B;
26  }
27
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
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
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
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
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
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