Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Real2Proxy.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/* Real2Proxy.h (C) 2000-2008 */
9/* */
10/* Proxy d'un 'Real2'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_REAL2PROXY_H
13#define ARCANE_UTILS_REAL2PROXY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Real2.h"
18#include "arcane/utils/BuiltInProxy.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23ARCANE_BEGIN_NAMESPACE
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
39class ARCANE_UTILS_EXPORT Real2Proxy
40{
41 public:
42
44 Real2Proxy(Real2& value,const MemoryAccessInfo& info)
45 : x(value.x,info), y(value.y,info), m_value(value), m_info(info) {}
48 : x(f.x), y(f.y), m_value(f.m_value), m_info(f.m_info) {}
49 const Real2& operator=(Real2Proxy f)
50 { x=f.x; y=f.y; return m_value; }
51 const Real2& operator=(Real2 f)
52 { x=f.x; y=f.y; return m_value; }
54 const Real2& operator=(Real v)
55 { x = y = v; return m_value; }
56 operator Real2() const
57 {
58 return getValue();
59 }
60 //operator Real2&()
61 //{
62 // return getValueMutable();
63 //}
64 public:
65
68
69 private:
70
71 Real2& m_value;
72 MemoryAccessInfo m_info;
73
74 public:
75
77 Real2 copy() const { return m_value; }
79 Real2Proxy& reset() { x = y = 0.; return (*this); }
81 Real2Proxy& assign(Real ax,Real ay)
82 { x = ax; y = ay; return (*this); }
85 { x = f.x; y = f.y; return (*this); }
101 bool isNearlyZero() const
102 {
103 return math::isNearlyZero(x.getValue()) && math::isNearlyZero(y.getValue());
104 }
106 Real abs2() const
107 { return x*x + y*y; }
109 Real abs() const
110 { return _sqrt(abs2()); }
111
116 istream& assign(istream& i);
118 ostream& print(ostream& o) const;
120 ostream& printXy(ostream& o) const;
121
123 Real2Proxy& add(Real2 b) { x+=b.x; y+=b.y; return (*this); }
125 Real2Proxy& sub(Real2 b) { x-=b.x; y-=b.y; return (*this); }
127 Real2Proxy& mul(Real2 b) { x*=b.x; y*=b.y; return (*this); }
129 Real2Proxy& div(Real2 b) { x/=b.x; y/=b.y; return (*this); }
131 Real2Proxy& addSame(Real b) { x+=b; y+=b; return (*this); }
133 Real2Proxy& subSame(Real b) { x-=b; y-=b; return (*this); }
135 Real2Proxy& mulSame(Real b) { x*=b; y*=b; return (*this); }
137 Real2Proxy& divSame(Real b) { x/=b; y/=b; return (*this); }
139 Real2Proxy& operator+=(Real2 b) { return add(b); }
141 Real2Proxy& operator-=(Real2 b) { return sub(b); }
143 Real2Proxy& operator*=(Real2 b) { return mul(b); }
145 void operator*=(Real b) { x*=b; y*=b; }
147 Real2Proxy& operator/=(Real2 b) { return div(b); }
149 void operator/=(Real b) { x/=b; y/=b; }
151 Real2 operator+(Real2 b) const { return Real2(x+b.x,y+b.y); }
153 Real2 operator-(Real2 b) const { return Real2(x-b.x,y-b.y); }
155 Real2 operator-() const { return Real2(-x,-y); }
160 Real2 operator*(Real2 b) const { return Real2(x*b.x,y*b.y); }
165 Real2 operator/(Real2 b) const { return Real2(x/b.x,y/b.y); }
166
175 {
176 Real d = abs();
177 if (!math::isZero(d))
178 divSame(d);
179 return (*this);
180 }
181
198 bool operator==(Real2 b) const
199 { return _eq(x,b.x) && _eq(y,b.y); }
206 bool operator!=(Real2 b) const
207 { return !operator==(b); }
208
209 public:
210
211 Real2 getValue() const
212 {
213 m_info.setRead();
214 return m_value;
215 }
216 Real2& getValueMutable()
217 {
218 m_info.setReadOrWrite();
219 return m_value;
220 }
221
222 private:
223
229 static bool _eq(Real a,Real b)
230 { return math::isEqual(a,b); }
232 static Real _sqrt(Real a)
233 { return math::sqrt(a); }
234};
235
236/*---------------------------------------------------------------------------*/
237/*---------------------------------------------------------------------------*/
241inline Real2 operator*(Real sca,const Real2Proxy& vec)
242{
243 return Real2(vec.x*sca,vec.y*sca);
244}
245
246/*---------------------------------------------------------------------------*/
247/*---------------------------------------------------------------------------*/
251inline Real2
252operator*(const Real2Proxy& vec,Real sca)
253{
254 return Real2(vec.x*sca,vec.y*sca);
255}
256
257/*---------------------------------------------------------------------------*/
258/*---------------------------------------------------------------------------*/
262inline Real2
264{
265 return Real2(vec.x/sca,vec.y/sca);
266}
267
268/*---------------------------------------------------------------------------*/
269/*---------------------------------------------------------------------------*/
276inline bool
277operator<(const Real2Proxy& v1,const Real2Proxy& v2)
278{
279 return v1.getValue() < v2.getValue();
280}
281
282/*---------------------------------------------------------------------------*/
283/*---------------------------------------------------------------------------*/
288inline ostream&
289operator<< (ostream& o,Real2Proxy t)
290{
291 return t.printXy(o);
292}
297inline istream&
299{
300 return t.assign(i);
301}
302
303/*---------------------------------------------------------------------------*/
304/*---------------------------------------------------------------------------*/
305
306ARCANE_END_NAMESPACE
307
308/*---------------------------------------------------------------------------*/
309/*---------------------------------------------------------------------------*/
310
311#endif
312
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
Real abs2() const
Retourne la norme au carré du couple .
Definition Real2Proxy.h:106
Real2 copy() const
Retourne une copie du couple.
Definition Real2Proxy.h:77
void operator/=(Real b)
Divise chaque composante du couple par le réel b.
Definition Real2Proxy.h:149
RealProxy x
première composante du couple
Definition Real2Proxy.h:66
Real2Proxy & subSame(Real b)
Soustrait b à chaque composante du couple.
Definition Real2Proxy.h:133
Real2 operator*(Real2 b) const
Créé un couple qui vaut ce couple dont chaque composant a été multipliée par la composante correspond...
Definition Real2Proxy.h:160
Real2Proxy & mulSame(Real b)
Multiplie chaque composante du couple par b.
Definition Real2Proxy.h:135
Real2Proxy & operator/=(Real2 b)
Divise chaque composante du couple par la composant correspondant de b.
Definition Real2Proxy.h:147
Real2Proxy & sub(Real2 b)
Soustrait b au couple.
Definition Real2Proxy.h:125
void operator*=(Real b)
Multiplie chaque composante du couple par le réel b.
Definition Real2Proxy.h:145
Real2Proxy & div(Real2 b)
Divise chaque composante du couple par la composant correspondant de b.
Definition Real2Proxy.h:129
Real2Proxy & assign(Real2 f)
Copie le couple f.
Definition Real2Proxy.h:84
Real2 operator-() const
Créé un couple opposé au couple actuel.
Definition Real2Proxy.h:155
ostream & print(ostream &o) const
Ecrit le couple sur le flot o lisible par un assign()
Real2Proxy & add(Real2 b)
Ajoute b au couple.
Definition Real2Proxy.h:123
bool operator!=(Real2 b) const
Compare deux couples. Pour la notion d'égalité, voir operator==()
Definition Real2Proxy.h:206
Real abs() const
Retourne la norme du couple .
Definition Real2Proxy.h:109
static Real _sqrt(Real a)
Retourne la racine carrée de a.
Definition Real2Proxy.h:232
Real2Proxy & normalize()
Normalise le couple.
Definition Real2Proxy.h:174
Real2Proxy & operator-=(Real2 b)
Soustrait b au couple.
Definition Real2Proxy.h:141
Real2 operator+(Real2 b) const
Créé un couple qui vaut ce couple ajouté à b.
Definition Real2Proxy.h:151
Real2Proxy & operator*=(Real2 b)
Multiplie chaque composante du couple par la composant correspondant de b.
Definition Real2Proxy.h:143
ostream & printXy(ostream &o) const
Ecrit le couple sur le flot o sous la forme (x,y)
Real2Proxy & divSame(Real b)
Divise chaque composante du couple par b.
Definition Real2Proxy.h:137
bool operator==(Real2 b) const
Compare le couple à b.
Definition Real2Proxy.h:198
Real2Proxy & reset()
Réinitialise le couple avec les constructeurs par défaut.
Definition Real2Proxy.h:79
Real2Proxy & addSame(Real b)
Ajoute b à chaque composante du couple.
Definition Real2Proxy.h:131
Real2 operator/(Real2 b) const
Créé un couple qui vaut ce couple dont chaque composant a été divisée par la composante correspondant...
Definition Real2Proxy.h:165
Real2Proxy & mul(Real2 b)
Multiple chaque composante du couple par la composant correspondant de b.
Definition Real2Proxy.h:127
bool isNearlyZero() const
Compare le couple avec le couple nul.
Definition Real2Proxy.h:101
const Real2 & operator=(Real v)
Affecte à l'instance le couple (v,v).
Definition Real2Proxy.h:54
RealProxy y
deuxième composante du couple
Definition Real2Proxy.h:67
Real2Proxy & operator+=(Real2 b)
Ajoute b au couple.
Definition Real2Proxy.h:139
Real2Proxy & assign(Real ax, Real ay)
Affecte à l'instance le couple (ax,ay,az)
Definition Real2Proxy.h:81
istream & assign(istream &i)
Lit un couple sur le flot i Le couple est lu sous la forme de trois valeur de type #value_type.
Real2Proxy(Real2 &value, const MemoryAccessInfo &info)
Construit le couplet (ax,ay)
Definition Real2Proxy.h:44
static bool _eq(Real a, Real b)
Compare les valeurs de a et b avec le comparateur TypeEqualT.
Definition Real2Proxy.h:229
Real2 operator-(Real2 b) const
Créé un couple qui vaut b soustrait de ce couple.
Definition Real2Proxy.h:153
Real2Proxy(const Real2Proxy &f)
Construit un couple identique à f.
Definition Real2Proxy.h:47
Classe gérant un vecteur de réel de dimension 2.
Definition Real2.h:121
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
Real y
deuxième composante du couple
Definition Real2.h:35
Real x
première composante du couple
Definition Real2.h:34