+++ /dev/null
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-
- <meta http-equiv="Content-Type"
- content="text/html; charset=iso-8859-1">
-
- <meta name="GENERATOR"
- content="Mozilla/4.73 [en] (WinNT; I) [Netscape]">
- <title>Med Module Documentation</title>
-</head>
- <body bgcolor="#cccccc" text="#000000" link="#0000ee" alink="#0000ee"
- vlink="#551a8b">
-
-<div align="center">
-<center>
-<center>
- </center>
-
-<table width="96%" align="center">
- <tbody>
- <tr>
- <td><a href="http://www.opencascade.com"><img
- src="tui/MED/sources/logocorp.gif" border="0" height="46" width="122">
- </a></td>
- <td>
-
- <div align="right"><a href="http://www.opencascade.org/SALOME/"><img
- src="tui/MED/sources/application.gif" border="0" height="46"
- width="108">
- </a></div>
- </td>
- </tr>
-
- </tbody>
-</table>
-
-<div align="center">
-<center>
-<hr width="100%" size="2">
-<h1>Med MODULE Documentation</h1>
- </center>
- </div>
-
-<table width="96%">
- <tbody>
-
- </tbody>
-</table>
- </center>
-
-<div align="center">
-<p> <img src="tui/MED/sources/Application-About.png"
- alt="Application-About.png" width="30%" height="20%">
- </p>
- </div>
-
-<center>
-<table width="96%">
- <tbody>
-
- </tbody>
-</table>
- <br>
- </center>
-
-<address> </address>
- <br>
-
-<address> </address>
-
-<center></center>
-
-<center><br>
- </center>
-
-<address> </address>
-
-<center><big><a href="tui/MED/index.html">TUI Documentation</a></big></center>
-
-<address> </address>
-
-<center></center>
-
-<center><br>
- <br>
- </center>
- </div>
- <br>
- <br>
- <br>
- <br>
-</body>
-</html>
--- /dev/null
+<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+
+ <meta name="GENERATOR"
+ content="Mozilla/4.73 [en] (WinNT; I) [Netscape]">
+ <title>Med Module Documentation</title>
+</head>
+ <body bgcolor="#cccccc" text="#000000" link="#0000ee" alink="#0000ee"
+ vlink="#551a8b">
+
+<div align="center">
+<center>
+<center>
+ </center>
+
+<table width="96%" align="center">
+ <tbody>
+ <tr>
+ <td><a href="http://www.opencascade.com"><img
+ src="tui/MED/sources/logocorp.gif" border="0" height="46" width="122">
+ </a></td>
+ <td>
+
+ <div align="right"><a href="http://www.opencascade.org/SALOME/"><img
+ src="tui/MED/sources/application.gif" border="0" height="46"
+ width="108">
+ </a></div>
+ </td>
+ </tr>
+
+ </tbody>
+</table>
+
+<div align="center">
+<center>
+<hr width="100%" size="2">
+<h1>Med MODULE Documentation</h1>
+ </center>
+ </div>
+
+<table width="96%">
+ <tbody>
+
+ </tbody>
+</table>
+ </center>
+
+<div align="center">
+<p> <img src="tui/MED/sources/Application-About.png"
+ alt="Application-About.png" width="30%" height="20%">
+ </p>
+ </div>
+
+<center>
+<table width="96%">
+ <tbody>
+
+ </tbody>
+</table>
+ <br>
+ </center>
+
+<address> </address>
+ <br>
+
+<address> </address>
+
+<center></center>
+
+<center><br>
+ </center>
+
+<address> </address>
+
+<center><big><a href="tui/MED/index.html">TUI Documentation</a></big></center>
+
+<address> </address>
+
+<center></center>
+
+<center><br>
+ <br>
+ </center>
+ </div>
+ <br>
+ <br>
+ <br>
+ <br>
+</body>
+</html>
// permet de faire des opérations algébriques sur des Wrappers_MED_Field sans faire d'allocations inutiles
// voir les articles de Valdhuizen pour la compréhension du processus
-template <class TYPE> class Valeur;
-
struct Plus
{
public :
}
};
+template <class TYPE> class Valeur
+{
+protected :
+ TYPE * valeurs;
+ int nbr_valeurs;
+ int a_detruire;
+public :
+ Valeur();
+ Valeur(TYPE * val,int nv);
+ Valeur(int n);
+ template <typename Left,typename Op,typename Right> Valeur(X<Left,Op,Right> expression);
+ template <typename Left,typename Op,typename Right> void operator=(X<Left,Op,Right> expression);
+ void operator=(Valeur v);
+ Valeur(const Valeur &v);
+ ~Valeur();
+ TYPE operator[](int i);
+ int SIZE() const;
+ double NormeAbs();
+};
+
template <typename TYPE> X< Valeur<TYPE>,Plus,Valeur<TYPE> > operator+(Valeur<TYPE> v1,Valeur<TYPE> v2)
{
return X< Valeur<TYPE>,Plus,Valeur<TYPE> >(v1,v2);
// Valeur est symboliquement l'argument d'une classe formelle Vecteur<Valeur>
// elle peut etre un réel ou un pointeur sur réel, simulant un vecteur de vecteur
-template <class TYPE> class Valeur
+template <class TYPE> Valeur<TYPE>::Valeur():valeurs(NULL),a_detruire(0){}
+template <class TYPE> Valeur<TYPE>::Valeur(TYPE * val,int nv):valeurs(val),nbr_valeurs(nv),a_detruire(0){} // A VERIFIER
+template <class TYPE> Valeur<TYPE>::Valeur(int n):nbr_valeurs(n),a_detruire(1)
{
-protected :
- TYPE * valeurs;
- int nbr_valeurs;
- int a_detruire;
-public :
- Valeur():valeurs(NULL),a_detruire(0){}
- Valeur(TYPE * val,int nv):valeurs(val),nbr_valeurs(nv),a_detruire(0){} // A VERIFIER
- Valeur(int n):nbr_valeurs(n),a_detruire(1)
- {
- valeurs=new TYPE[nbr_valeurs];
- }
- template <typename Left,typename Op,typename Right> Valeur(X<Left,Op,Right> expression)
- {
- for (int i=0;i<nbr_valeurs;i++) valeurs[i]=expression[i];
- }
- template <typename Left,typename Op,typename Right> void operator=(X<Left,Op,Right> expression)
- {
- for (int i=0;i<nbr_valeurs;i++) valeurs[i]=expression[i];
- }
- void operator=(Valeur v)
- {
- for (int i=0;i<nbr_valeurs;i++) valeurs[i]=v[i];
- }
- Valeur(const Valeur &v):nbr_valeurs(v.nbr_valeurs)
- {
- if (v.a_detruire)
- {
- a_detruire=1;
- valeurs=new TYPE[nbr_valeurs];
- for (int i=0;i<nbr_valeurs;i++) valeurs[i]=v.valeurs[i];
- }
- else
- {
- a_detruire=0;
- valeurs=v.valeurs;
- }
- }
- ~Valeur(){if (a_detruire) delete [] valeurs;}
- TYPE operator[](int i){return valeurs[i];}
- int SIZE() const {return nbr_valeurs;}
- double NormeAbs()
- {
- int i;
- double tmp=0;
- for (i=0;i<nbr_valeurs;i++) tmp+=fabs(valeurs[i]);
- return tmp;
- }
-
-};
+ valeurs=new TYPE[nbr_valeurs];
+}
+template <class TYPE> template <typename Left,typename Op,typename Right> Valeur<TYPE>::Valeur(X<Left,Op,Right> expression)
+{
+ for (int i=0;i<nbr_valeurs;i++) valeurs[i]=expression[i];
+}
+template <class TYPE> template <typename Left,typename Op,typename Right> void Valeur<TYPE>::operator=(X<Left,Op,Right> expression)
+{
+ for (int i=0;i<nbr_valeurs;i++) valeurs[i]=expression[i];
+}
+template <class TYPE> void Valeur<TYPE>::operator=(Valeur v)
+{
+ for (int i=0;i<nbr_valeurs;i++) valeurs[i]=v[i];
+}
+template <class TYPE> Valeur<TYPE>::Valeur(const Valeur &v):nbr_valeurs(v.nbr_valeurs)
+{
+ if (v.a_detruire)
+ {
+ a_detruire=1;
+ valeurs=new TYPE[nbr_valeurs];
+ for (int i=0;i<nbr_valeurs;i++) valeurs[i]=v.valeurs[i];
+ }
+ else
+ {
+ a_detruire=0;
+ valeurs=v.valeurs;
+ }
+}
+template <class TYPE> Valeur<TYPE>::~Valeur(){if (a_detruire) delete [] valeurs;}
+template <class TYPE> TYPE Valeur<TYPE>::operator[](int i){return valeurs[i];}
+template <class TYPE> int Valeur<TYPE>::SIZE() const {return nbr_valeurs;}
+template <class TYPE> double Valeur<TYPE>::NormeAbs()
+{
+ int i;
+ double tmp=0;
+ for (i=0;i<nbr_valeurs;i++) tmp+=fabs(valeurs[i]);
+ return tmp;
+}
template <class TYPE> ostream &operator<<(ostream &os,Valeur<TYPE> v)
{