Salome HOME
building the version 1.4.0 of the module: update in the main trunk just
[modules/med.git] / src / MEDMEM / MEDMEM_InterpolationWrappers.hxx
1
2 #ifndef WRAPPERS_HPP
3 #define WRAPPERS_HPP
4
5 // les classes de wrapping
6
7 namespace MEDMEM {
8 template <int DIMENSION> class Wrapper_Noeud
9 {
10 protected :
11   double * coordonnees;
12 public :
13         Wrapper_Noeud():coordonnees(NULL) 
14                 {
15                 }
16         Wrapper_Noeud(const double * coord):coordonnees( (double *) coord) 
17                 {
18                 }
19         ~Wrapper_Noeud() 
20                 {
21                 coordonnees=NULL;
22                 }
23         void positionne(double *place) 
24                 {
25                 coordonnees=place;
26                 }
27         const double & operator[] (int i) const
28                 {
29                 return coordonnees[i];
30                 }
31         double operator[] (int i)
32                 {
33                 return coordonnees[i];
34                 }
35         friend double DistanceInf(const Wrapper_Noeud<DIMENSION> &A,const Wrapper_Noeud<DIMENSION> &B) 
36                 {
37                 double max=0;
38                 double tmp;
39                 for (int i=0;i<DIMENSION;i++)
40                         {
41                         tmp=fabs(A[i]-B[i]);
42                         if (tmp>max) max=tmp;
43                         }
44                 return max;
45                 }
46         friend double DistanceL2(const Wrapper_Noeud<DIMENSION> &A,const Wrapper_Noeud<DIMENSION> &B)  
47                 {
48                 double tmp,somme=0;
49                 for (int i=0;i<DIMENSION;i++)
50                         {
51                         tmp=(A[i]-B[i]);
52                         somme+=tmp*tmp;
53                         }
54                 return sqrt(somme);
55                 }
56         };
57         
58 template <int DIMENSION> class Wrapper_Nuage
59         {
60         protected : 
61                 int nbr_noeuds;
62                 const double *  noeuds;
63                 Wrapper_Noeud<DIMENSION> show;
64         public :
65                 Wrapper_Nuage():nbr_noeuds(0),noeuds(NULL) {}
66                 Wrapper_Nuage( const double * const n, int nn):nbr_noeuds(nn),noeuds(n),show(noeuds) {}
67                 ~Wrapper_Nuage() {noeuds=NULL;}
68                 Wrapper_Noeud<DIMENSION> & operator [] (int i)
69                         {
70                         show.positionne((double *) &noeuds[DIMENSION*i]);
71                         return show;
72                         }
73                 int size() const {return nbr_noeuds;}
74         };
75 };
76
77 #endif