Home | History | Annotate | Download | only in BLAS
      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 
     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