Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Real2x2Proxy.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* Real2x2Proxy.h (C) 2000-2008 */
9/* */
10/* Proxy du type 'Real2x2'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_REAL2X2PROXY_H
13#define ARCANE_UTILS_REAL2X2PROXY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Real2x2.h"
18#include "arcane/utils/Real2Proxy.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23ARCANE_BEGIN_NAMESPACE
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Proxy du type 'Real2x2'.
29 */
30class ARCANE_UTILS_EXPORT Real2x2Proxy
31{
32 public:
33
34 //! Construit le couple (ax,ay)
36 : x(value.x,info), y(value.y,info), m_value(value), m_info(info) {}
37 //! Construit un couple identique à \a f
39 : x(f.x), y(f.y), m_value(f.m_value), m_info(f.m_info) {}
40 const Real2x2Proxy& operator=(const Real2x2Proxy& f)
41 { x=f.x; y=f.y; return (*this); }
42 const Real2x2Proxy& operator=(Real2x2 f)
43 { x=f.x; y=f.y; return (*this); }
44 //! Affecte à l'instance le couple (v,v,v).
45 const Real2x2Proxy& operator=(Real v)
46 { x = v; y = v; return (*this); }
47
48 public:
49
50 Real2Proxy x; //!< Première composante
51 Real2Proxy y; //!< Deuxième composante
52
53 private:
54
55 Real2x2& m_value;
56 MemoryAccessInfo m_info;
57
58 public:
59
60 //! Retourne une copie du couple.
61 Real2x2 copy() const { return getValue(); }
62 //! Réinitialise le couple avec les constructeurs par défaut.
63 Real2x2Proxy& reset() { *this = Real2x2::null(); return (*this); }
64 //! Affecte à l'instance le couple (ax,ay,az)
66 { x = ax; y = ay; return (*this); }
67 //! Copie le couple \a f
69 { x = f.x; y = f.y; return (*this); }
70 operator const Real2x2&() const
71 {
72 return getValue();
73 }
74 //operator Real2x2&()
75 //{
76 // return getValueMutable();
77 //}
78 /*!
79 * \brief Compare la matrice avec la matrice nulle.
80 *
81 * La matrice est nulle si et seulement si chacune de ses composant
82 * est inférieure à un espilon donné. La valeur de l'epsilon utilisée est celle
83 * de float_info<value_type>::nearlyEpsilon():
84 * \f[A=0 \Leftrightarrow |A.x|<\epsilon,|A.y|<\epsilon\f]
85 *
86 * \retval true si la matrice est égale à la matrice nulle,
87 * \retval false sinon.
88 */
89 bool isNearlyZero() const
90 { return x.isNearlyZero() && y.isNearlyZero(); }
91 /*!
92 * \brief Lit la matrice sur le flot \a i
93 * La matrice est lue sous la forme de trois Real2.
94 */
95 istream& assign(istream& i);
96 //! Ecrit le couple sur le flot \a o lisible par un assign()
97 ostream& print(ostream& o) const;
98 //! Ecrit le couple sur le flot \a o sous la forme (x,y,z)
99 ostream& printXy(ostream& o) const;
100
101 //! Ajoute \a b au couple
102 Real2x2Proxy& add(Real2x2 b) { x+=b.x; y+=b.y; return (*this); }
103 //! Soustrait \a b au couple
104 Real2x2Proxy& sub(Real2x2 b) { x-=b.x; y-=b.y; return (*this); }
105 //! Multiple chaque composante du couple par la composant correspondant de \a b
106 //Real2x2Proxy& mul(Real2x2Proxy b) { x*=b.x; y*=b.y; return (*this); }
107 //! Divise chaque composante du couple par la composant correspondant de \a b
108 Real2x2Proxy& div(Real2x2 b) { x/=b.x; y/=b.y; return (*this); }
109 //! Ajoute \a b à chaque composante du couple
110 Real2x2Proxy& addSame(Real2 b) { x+=b; y+=b; return (*this); }
111 //! Soustrait \a b à chaque composante du couple
112 Real2x2Proxy& subSame(Real2 b) { x-=b; y-=b; return (*this); }
113 //! Multiplie chaque composante du couple par \a b
114 Real2x2Proxy& mulSame(Real2 b) { x*=b; y*=b; return (*this); }
115 //! Divise chaque composante du couple par \a b
116 Real2x2Proxy& divSame(Real2 b) { x/=b; y/=b; return (*this); }
117 //! Ajoute \a b au couple.
118 Real2x2Proxy& operator+=(Real2x2 b) { return add(b); }
119 //! Soustrait \a b au couple
120 Real2x2Proxy& operator-=(Real2x2 b) { return sub(b); }
121 //! Multiple chaque composante du couple par la composant correspondant de \a b
122 //Real2x2Proxy& operator*=(Real2x2Proxy b) { return mul(b); }
123 //! Multiple chaque composante de la matrice par le réel \a b
124 void operator*=(Real b) { x*=b; y*=b; }
125 //! Divise chaque composante du couple par la composant correspondant de \a b
126 //Real2x2Proxy& operator/= (Real2x2 b) { return div(b); }
127 //! Divise chaque composante de la matrice par le réel \a b
128 void operator/= (Real b) { x/=b; y/=b; }
129 //! Créé un couple qui vaut ce couple ajouté à \a b
130 Real2x2 operator+(Real2x2 b) const { return Real2x2(x+b.x,y+b.y); }
131 //! Créé un couple qui vaut \a b soustrait de ce couple
132 Real2x2 operator-(Real2x2 b) const { return Real2x2(x-b.x,y-b.y); }
133 //! Créé un tenseur opposé au tenseur actuel
134 Real2x2 operator-() const { return Real2x2(-x,-y); }
135 /*!
136 * \brief Créé un couple qui vaut ce couple dont chaque composant a été
137 * multipliée par la composante correspondante de \a b.
138 */
139 //Real2x2 operator*(Real2x2Proxy b) const { return Real2x2Proxy(x*b.x,y*b.y); }
140 /*!
141 * \brief Créé un couple qui vaut ce couple dont chaque composant a été divisée
142 * par la composante correspondante de \a b.
143 */
144 //Real2x2Proxy operator/(Real2x2Proxy b) const { return Real2x2Proxy(x/b.x,y/b.y); }
145
146 public:
147 const Real2x2& getValue() const
148 {
149 m_info.setRead();
150 return m_value;
151 }
152 Real2x2& getValueMutable()
153 {
154 m_info.setReadOrWrite();
155 return m_value;
156 }
157 private:
158
159 /*!
160 * \brief Compare les valeurs de \a a et \a b avec le comparateur TypeEqualT
161 * \retval true si \a a et \a b sont égaux,
162 * \retval false sinon.
163 */
164 static bool _eq(Real a,Real b)
165 { return TypeEqualT<Real>::isEqual(a,b); }
166};
167
168/*---------------------------------------------------------------------------*/
169/*---------------------------------------------------------------------------*/
170
171inline bool
172operator==(const Real2x2& a,const Real2x2Proxy& b)
173{
174 return a==b.getValue();
175}
176inline bool
177operator==(const Real2x2Proxy& a,const Real2x2& b)
178{
179 return a.getValue()==b;
180}
181inline bool
182operator==(const Real2x2Proxy& a,const Real2x2Proxy& b)
183{
184 return a.getValue()==b.getValue();
185}
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
189
190inline bool
191operator!=(const Real2x2& a,const Real2x2Proxy& b)
192{
193 return a!=b.getValue();
194}
195inline bool
196operator!=(const Real2x2Proxy& a,const Real2x2& b)
197{
198 return a.getValue()!=b;
199}
200inline bool
201operator!=(const Real2x2Proxy& a,const Real2x2Proxy& b)
202{
203 return a.getValue()!=b.getValue();
204}
205
206/*---------------------------------------------------------------------------*/
207/*---------------------------------------------------------------------------*/
208/*!
209 * \brief Ecrit le couple \a t sur le flot \a o
210 * \relates Real2x2Proxy
211 */
212inline ostream&
213operator<< (ostream& o,const Real2x2Proxy& t)
214{
215 return t.printXy(o);
216}
217/*!
218 * \brief Lit le couple \a t à partir du flot \a o.
219 * \relates Real2x2Proxy
220 */
221inline istream&
222operator>> (istream& i,Real2x2Proxy& t)
223{
224 return t.assign(i);
225}
226
227/*---------------------------------------------------------------------------*/
228/*---------------------------------------------------------------------------*/
229/*! \brief Multiplication par un scalaire. */
230inline Real2x2
231operator*(Real sca,const Real2x2Proxy& vec)
232{
233 return Real2x2(vec.x*sca,vec.y*sca);
234}
235
236/*---------------------------------------------------------------------------*/
237/*---------------------------------------------------------------------------*/
238/*! \brief Multiplication par un scalaire. */
239inline Real2x2
240operator*(const Real2x2Proxy& vec,Real sca)
241{
242 return Real2x2(vec.x*sca,vec.y*sca);
243}
244
245/*---------------------------------------------------------------------------*/
246/*---------------------------------------------------------------------------*/
247/*! \brief Division par un scalaire. */
248inline Real2x2
249operator/(const Real2x2Proxy& vec,Real sca)
250{
251 return Real2x2(vec.x/sca,vec.y/sca);
252}
253
254/*---------------------------------------------------------------------------*/
255/*---------------------------------------------------------------------------*/
256/*!
257 * \brief Opérateur de comparaison.
258 *
259 * Cet opérateur permet de trier les Real2 pour les utiliser par exemple
260 * dans les std::set
261 */
262inline bool
263operator<(const Real2x2Proxy& v1,const Real2x2Proxy& v2)
264{
265 return (v1.getValue()<v2.getValue());
266}
267
268/*---------------------------------------------------------------------------*/
269/*---------------------------------------------------------------------------*/
270
271/*---------------------------------------------------------------------------*/
272/*---------------------------------------------------------------------------*/
273
274ARCANE_END_NAMESPACE
275
276/*---------------------------------------------------------------------------*/
277/*---------------------------------------------------------------------------*/
278
279#endif
Classe gérant un vecteur de réel de dimension 2.
Definition Real2Proxy.h:40
RealProxy x
première composante du couple
Definition Real2Proxy.h:66
bool isNearlyZero() const
Compare le couple avec le couple nul.
Definition Real2Proxy.h:101
Classe gérant un vecteur de réel de dimension 2.
Definition Real2.h:121
Proxy du type 'Real2x2'.
Real2x2 operator-(Real2x2 b) const
Créé un couple qui vaut b soustrait de ce couple.
Real2x2Proxy & divSame(Real2 b)
Divise chaque composante du couple par b.
ostream & print(ostream &o) const
Ecrit le couple sur le flot o lisible par un assign()
Real2x2Proxy & add(Real2x2 b)
Ajoute b au couple.
bool isNearlyZero() const
Compare la matrice avec la matrice nulle.
void operator*=(Real b)
Multiple chaque composante du couple par la composant correspondant de b.
Real2x2Proxy & assign(Real2x2Proxy f)
Copie le couple f.
Real2x2Proxy(const Real2x2Proxy &f)
Construit un couple identique à f.
Real2x2Proxy & mulSame(Real2 b)
Multiplie chaque composante du couple par b.
Real2x2 operator-() const
Créé un tenseur opposé au tenseur actuel.
Real2x2Proxy & operator+=(Real2x2 b)
Ajoute b au couple.
Real2x2Proxy & subSame(Real2 b)
Soustrait b à chaque composante du couple.
Real2x2Proxy(Real2x2 &value, const MemoryAccessInfo &info)
Construit le couple (ax,ay)
Real2x2 operator+(Real2x2 b) const
Créé un couple qui vaut ce couple ajouté à b.
Real2x2Proxy & addSame(Real2 b)
Ajoute b à chaque composante du couple.
const Real2x2Proxy & operator=(Real v)
Affecte à l'instance le couple (v,v,v).
Real2x2Proxy & operator-=(Real2x2 b)
Soustrait b au couple.
Real2x2Proxy & div(Real2x2 b)
Multiple chaque composante du couple par la composant correspondant de b.
const Real2x2 & getValue() const
Créé un couple qui vaut ce couple dont chaque composant a été multipliée par la composante correspond...
Real2Proxy x
Première composante.
istream & assign(istream &i)
Lit la matrice sur le flot i La matrice est lue sous la forme de trois Real2.
Real2x2Proxy & assign(Real2 ax, Real2 ay)
Affecte à l'instance le couple (ax,ay,az)
Real2Proxy y
Deuxième composante.
Real2x2Proxy & reset()
Réinitialise le couple avec les constructeurs par défaut.
Real2x2Proxy & sub(Real2x2 b)
Soustrait b au couple.
Real2x2 copy() const
Retourne une copie du couple.
ostream & printXy(ostream &o) const
Ecrit le couple sur le flot o sous la forme (x,y,z)
Classe gérant une matrice de réel de dimension 2x2.
Definition Real2x2.h:53
Real2 x
Première composante.
Definition Real2x2.h:98
Real2 y
Deuxième composante.
Definition Real2x2.h:99
Real2 operator*(Real sca, const Real2Proxy &vec)
Multiplication par un scalaire.
Definition Real2Proxy.h:241
bool operator<(const Item &item1, const Item &item2)
Compare deux entités.
Definition Item.h:533
Real2 operator/(const Real2Proxy &vec, Real sca)
Division par un scalaire.
Definition Real2Proxy.h:263