c_interface_base.h 1.6 KB

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