Arcane  v3.14.10.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
30class ARCANE_UTILS_EXPORT Real2x2Proxy
31{
32 public:
33
36 : x(value.x,info), y(value.y,info), m_value(value), m_info(info) {}
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); }
45 const Real2x2Proxy& operator=(Real v)
46 { x = v; y = v; return (*this); }
47
48 public:
49
52
53 private:
54
55 Real2x2& m_value;
56 MemoryAccessInfo m_info;
57
58 public:
59
61 Real2x2 copy() const { return getValue(); }
63 Real2x2Proxy& reset() { *this = Real2x2::null(); return (*this); }
66 { x = ax; y = ay; return (*this); }
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 //}
89 bool isNearlyZero() const
90 { return x.isNearlyZero() && y.isNearlyZero(); }
95 istream& assign(istream& i);
97 ostream& print(ostream& o) const;
99 ostream& printXy(ostream& o) const;
100
102 Real2x2Proxy& add(Real2x2 b) { x+=b.x; y+=b.y; return (*this); }
104 Real2x2Proxy& sub(Real2x2 b) { x-=b.x; y-=b.y; return (*this); }
106 //Real2x2Proxy& mul(Real2x2Proxy b) { x*=b.x; y*=b.y; return (*this); }
108 Real2x2Proxy& div(Real2x2 b) { x/=b.x; y/=b.y; return (*this); }
110 Real2x2Proxy& addSame(Real2 b) { x+=b; y+=b; return (*this); }
112 Real2x2Proxy& subSame(Real2 b) { x-=b; y-=b; return (*this); }
114 Real2x2Proxy& mulSame(Real2 b) { x*=b; y*=b; return (*this); }
116 Real2x2Proxy& divSame(Real2 b) { x/=b; y/=b; return (*this); }
118 Real2x2Proxy& operator+=(Real2x2 b) { return add(b); }
120 Real2x2Proxy& operator-=(Real2x2 b) { return sub(b); }
122 //Real2x2Proxy& operator*=(Real2x2Proxy b) { return mul(b); }
124 void operator*=(Real b) { x*=b; y*=b; }
126 //Real2x2Proxy& operator/= (Real2x2 b) { return div(b); }
128 void operator/= (Real b) { x/=b; y/=b; }
130 Real2x2 operator+(Real2x2 b) const { return Real2x2(x+b.x,y+b.y); }
132 Real2x2 operator-(Real2x2 b) const { return Real2x2(x-b.x,y-b.y); }
134 Real2x2 operator-() const { return Real2x2(-x,-y); }
139 //Real2x2 operator*(Real2x2Proxy b) const { return Real2x2Proxy(x*b.x,y*b.y); }
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
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/*---------------------------------------------------------------------------*/
212inline ostream&
213operator<< (ostream& o,const Real2x2Proxy& t)
214{
215 return t.printXy(o);
216}
221inline istream&
223{
224 return t.assign(i);
225}
226
227/*---------------------------------------------------------------------------*/
228/*---------------------------------------------------------------------------*/
230inline Real2x2
231operator*(Real sca,const Real2x2Proxy& vec)
232{
233 return Real2x2(vec.x*sca,vec.y*sca);
234}
235
236/*---------------------------------------------------------------------------*/
237/*---------------------------------------------------------------------------*/
239inline Real2x2
240operator*(const Real2x2Proxy& vec,Real sca)
241{
242 return Real2x2(vec.x*sca,vec.y*sca);
243}
244
245/*---------------------------------------------------------------------------*/
246/*---------------------------------------------------------------------------*/
248inline Real2x2
250{
251 return Real2x2(vec.x/sca,vec.y/sca);
252}
253
254/*---------------------------------------------------------------------------*/
255/*---------------------------------------------------------------------------*/
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
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
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.
static bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
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
Opérations de comparaisons pour un type numérique T.
Definition Numeric.h:45
Espace de nom pour l'utilisation des accélérateurs.
Real2 operator/(const Real2Proxy &vec, Real sca)
Division par un scalaire.
Definition Real2Proxy.h:263